android - 如何在 Android 上使用 mediastore 访问其他应用程序创建的文件?
问题描述
我能够读取我在 android 10 中使用 mediastore 创建的文件
但我无法读取其他应用程序创建的文件
'java.io.IOException: setDataSource failed.: status=0x80000000' 尝试从其他应用程序访问 mediaPlayer 时发生错误
如何读取其他应用程序创建的文件?
下面是获取 MUSIC 文件夹中文件列表的代码
public void getFileListInFolderApiQ(String path) {
mDataSet.clear();
Uri externalUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.MediaColumns.RELATIVE_PATH + "=?";
String[] selectionArgs = new String[]{Environment.DIRECTORY_MUSIC + "/" + "tts" + "/"};
String[] projection = new String[]{
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.MIME_TYPE
};
Cursor cursor = getContentResolver().query(externalUri, projection, selection, selectionArgs, null);
Uri testUri = null;
if (cursor == null || !cursor.moveToFirst()) {
return;
}
do {
String contentUrl = externalUri.toString() + "/" + cursor.getString(0);
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
Uri uri = ContentUris.withAppendedId(externalUri, id);
String tmpFilename = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME));
testUri = uri;
mDataSet.add(new CustomTTSListData(tmpFilename, getPathFromUri(testUri), 1, 1, uri));
} while (cursor.moveToNext());
}
解决方案
推荐阅读
- swift - 如何从 FBSDKGraphRequest 结果将用户名设置为 UITextField
- sql - 使用 row_to_json() 中的值更新 jsonb 列
- electron - this.app.client.electron.remote.app.getApplicationMenu() 返回 undefined
- webview - 在颤振中,如何注入`js`脚本`atDocumentStart`而不是`onload`?
- p5.js - p5js 只绘制需要的东西
- node.js - 向 Firestore 数据库写入和获取计数器数据时出现不可预测/不一致的结果
- jquery - 字母头像 - 如何为每组字母添加不同的颜色类别 - A 到 H、J 到 S、T 到 Z?
- vb.net - 我们可以在后面的代码中设置 Telerik rad 时间选择器的最小时间吗
- dart - 如何在 Dart 中获取线程信息?
- javascript - 如何通过单击按钮更改 img 位置