使用 android.media.Rating 从 android 中的歌曲列表 (MP3) 中获取评分元数据

Posted

技术标签:

【中文标题】使用 android.media.Rating 从 android 中的歌曲列表 (MP3) 中获取评分元数据【英文标题】:Get rating metadata form a list of song (MP3) in android using android.media.Rating 【发布时间】:2021-04-24 14:17:35 【问题描述】:

我需要从手机中所有歌曲的列表中检索评分。 目前我将它们放在文件列表中。一些元数据可以用MediaMetadataRetriever列出,但BlackPlayer EX保存在歌曲中的评分不能,所以我需要用另一种方法提取它们。 我找到了“android.media.Rating”,但没有运气。

到目前为止我的代码:

String musicPath = Environment.getExternalStorageDirectory().toString() + "/Music";
textView.setText(musicPath);
File directory = new File(musicPath);
textView.setText("On it");
MP3FileFilter fileFilter = new MP3FileFilter();
List songsFiles = listFiles(directory, fileFilter, true);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
for(int i = 0; i<songsFiles.size(); i++)
    String song = songsFiles.get(i).toString();
    mmr.setDataSource(song);
    ((Rating) songsFiles.get(i)).getStarRating();

textView.setText("Done");

错误显示非常明显,但我找不到解决方法:

java.io.File cannot be cast to android.media.Rating

提前致谢。

【问题讨论】:

【参考方案1】:

可以使用 JAudioTagger jar 和此代码:

MP3File musicFile = (MP3File) AudioFileIO.read((File) songsFiles.get(i));
    if (musicFile != null && musicFile.hasID3v2Tag()) 
        ID3v23Frame frame = (ID3v23Frame) 
        musicFile.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_POPULARIMETER);
        FrameBodyPOPM body = (FrameBodyPOPM) frame.getBody();
        Long irating = body.getRating();

【讨论】:

以上是关于使用 android.media.Rating 从 android 中的歌曲列表 (MP3) 中获取评分元数据的主要内容,如果未能解决你的问题,请参考以下文章

使用存储过程从视图中检索或过滤数据是不是比使用存储过程从表中获取或过滤数据更快?

如何使用 graphql 从 Firebase 使用 Flutter 从 Cloud Firestore 获取数据?

使用 RTSP 从 Opencv 处理后,视频从 PC 流式传输到 Android

从哪里 clickonce 从 regedit 获取 DisplayName 中使用的值?

如何使用自适应卡操作从自适应卡获取用户响应。使用 Microsoft Bot Framework 从 MS Teams 频道提交操作?

无法从使用推送从苹果开发者帐户创建的 aps_production 创建 p12