[英]How can I get information about the audio file that was selected by the user? (using SAF and MediaStore)
我无法理解如何从MediaStore请求有关文件(由用户选择)的数据。
1)我像这样打开文件选择器
public static void launchPicker(Fragment f) {
Intent pickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
pickerIntent.setType("audio/mpeg");
pickerIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
pickerIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
f.startActivityForResult(pickerIntent, REQUEST_CODE);
}
2)从意图中获取数据
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
//multiselection only
ClipData clipData = data.getClipData();
if (clipData != null) {
List<Uri> results = new ArrayList<>();
for(int i = 0; i < clipData.getItemCount(); i++) {
Uri uri = clipData.getItemAt(i).getUri();
if (uri != null) {
results.add(uri);
}
}
//TODO process result
}
}
}
3) 现在我有了我的 DocumentUris 列表。 我的下一步应该是什么?
MediaSoter 可以通过Mediastore.getDocumentUri()将 mediaUri 转换为 documentUri ,但我找不到将 documentUri 转换为 mediaUri 的方法。
我想从 MediaStore 获取这些字段: MediaStore.Audio.Media._ID 、 ALBUM_ID 、 ARTIST_ID 。
我这样做:
Uri documentUri = DocumentsContract.buildDocumentUriUsingTree(mUri,
documentId);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(mContext,documentUri);
String albumName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
String album = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
String title = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
String track = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
String year = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.