【问题标题】:Getting efficiently the Genres of the Audio files in the MediaStore有效获取 MediaStore 中音频文件的流派
【发布时间】:2011-02-03 17:07:48
【问题描述】:

我正在尝试同步我自己的曲目和专辑数据库(包含附加数据)。到目前为止,我已经成功地从 MediaStore 中提取了专辑和曲目。

我无法正确地做的是为曲目拉动流派。有人可以发布一些代码吗?我想避免为每个轨道查询数据库,所以如果可能的话,一些代码来加载关联(Genre.id Audio.id)会很棒。

我正在努力使用内容提供商来获取 Genres.Members 信息。

【问题讨论】:

    标签: android audio mediastore


    【解决方案1】:

    我想看看 ringdroid 的优秀创造者是如何做到这一点的。 http://ringdroid.googlecode.com/svn-history/r37/trunk/src/com/ringdroid/SongMetadataReader.java

    他们基本上从检索流派名称和 ID 开始,然后使用它们可以轻松创建 content_uri,仅检索数据库中与这些流派匹配的歌曲。 但如果我是你,我会检查 id3 标签中不包含流派名称的文件是否存在“未知”或“空”流派

    【讨论】:

    • 谢谢,我找到了那个链接,但是它效率很低,因为我想要避免为每首歌曲请求获得流派。因此,我需要获取所有关联(audio_id、genre_id)的列表,如果可能的话,将每个 audio_id(例如第一个)的genre_id 的数量限制为 1,以便我可以缓存这些关联的 HashMap。
    • 这实际上并没有对每首歌曲提出请求。而是每个流派的请求。因此,如果您有 2 个流派 {rock, classic},那么只会发出两个 db 请求(查询)。
    • 好的,我再仔细看看。
    【解决方案2】:

    所以我最终做的是使用加载器和以下查询获取 sd 上的所有音频文件:

            loader = new CursorLoader(mActivity, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
                    new String[] {Audio.Media._ID, Audio.Media.DATA}, 
                    null, null, null);
    

    然后我检查它们是否以 .mp3 结尾,然后我使用jaudiotagger 并读取 ide3 的流派标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多