Android:从原始文件夹中检索音乐文件信息

时间:2014-06-22 18:25:26

标签: android cursor uri android-mediaplayer android-contentresolver

我正在尝试检索有关原始文件夹中音乐文件的信息。我需要检索持续时间,标题,艺术家等。我了解如何检索存储在外部存储器中的音乐文件的此信息,但我不知道如何在原始文件夹中的音乐文件。帮助和链接将不胜感激!

4 个答案:

答案 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);

依旧......

希望这有帮助!