首页 > 解决方案 > 如何从 Android 10 中的 MediaStore 获取 MediaMetaData,如专辑、曲目、标题、专辑封面等

问题描述

我为使用 Android 10 从音频文件中获取专辑、曲目、时长、专辑封面而苦苦挣扎了很长时间mediaStore

到目前为止我做了什么: 打开一个意图并获取音频文件夹:

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
    startActivityForResult(Intent.createChooser(intent, "Choose directory"), PICK_AUDIO_REQUEST);

然后onActivityResult:

mUri = data.getData();
childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(mUri,
            DocumentsContract.getTreeDocumentId(mUri));

遍历光标,我从 audioFiles 中获取 DocumentID。

Cursor c = resolver.query(childrenUri, null, null, null, null);
while (c.moveToNext()) {
     int idColumn = c.getColumnIndex(MediaStore.Audio.Media.DOCUMENT_ID);
     String documentId = c.getString(idColumn);
}

mediaStore然后我在查询音频列上打开另一个光标;

String selection = MediaStore.Audio.Media._ID + " like ?";
String[] selectionArgs = new String[]{documentId};
Uri mediaUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor mediaCursor = resolver.query(mediaUri,null,null,null,null);
while (mediaCursor.moveToNext()) {
    int albumIndex = mediaCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
    String album = mediaCursor.getString(albumIndex);   
}

mediaUri:content://media/external/audio/media 文档Uri:content://com.android.providers.downloads.documents/tree/downloads/document/msf%3A23

问题: 我的 mediaCursor.getCount() = 0,所以我无法获取任何结果。我的代码有什么问题,以至于我无法从mediaStore.

谢谢GGK

标签: androidandroid-contentresolvermediastore

解决方案


推荐阅读