我正在尝试检索有关原始文件夹中音乐文件的信息。我需要检索持续时间,标题,艺术家等。我了解如何检索存储在外部存储器中的音乐文件的此信息,但我不知道如何在原始文件夹中的音乐文件。帮助和链接将不胜感激!
答案 0 :(得分:4)
在搜索并尝试以下示例后,我没有成功。 @Jignesh Shaw的解决方案在设置MediaMetadataRetriever的来源时给了我一个IllegalArgumentException,而@Hanz Kratz的解决方案只能提取歌曲的持续时间(正如他所描述的)< / p> 然而,在这两者之间,我受到了启发,想出了一个有效的解决方案。
Uri mediaPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.song_name);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(this, mediaPath);
然后可以像两个用户都说明的那样提取信息
String sponsorTitle = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String sponsorArtist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
//and so on...
我不知道为什么这完美无缺,但@Hanz Kratz的解决方案却没有。如果其他人偶然发现了这个帖子,那么如果你发布了你的发现,那就太好了。谢谢大家!
答案 1 :(得分:1)
获取原始资产的FileDescriptor
,然后使用MediaMetadataRetriever
提取持续时间等元数据。
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
FileDescriptor fd = getResources().openRawResourceFd(R.raw.rocknroll).getFileDescriptor();
mmr.setDataSource(fd);
String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
这适用于持续时间,但不幸的是,MediaMetadataRetriever
对于艺术家,标题,...以及一些MP3文件存在问题:Android MediaMetadataRetriever returns null values from most keys
答案 2 :(得分:0)
这可能会有所帮助: -
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION};
cursor = this.managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection,null, null);
private List<String> songs = new ArrayList<String>();
while(cursor.moveToNext()){
songs.add(cursor.getString(0) + "||" + cursor.getString(1) + "||" +
cursor.getString(2) + "||" + cursor.getString(3) + "||" +
cursor.getString(4) + "||" + cursor.getString(5));
}
答案 3 :(得分:0)
加载资源的路径,如下所示:
String mediaPath = Uri.parse("android.resource://<your-package-name>/raw/filename").getPath();
确保您没有附加文件扩展名。例如,使用“filename”而不是“filename.mp3”
然后您可以访问ID3标签(假设您使用的是mp3文件),如下所示:
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(mediaPath);
String albumName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
依旧......
希望这有帮助!