各位好
小弟在做一个mp3播放的小例子,其中要对当前显示的mp3的曲名、艺术家和专辑图像进行显示。
1. 这些内容要怎么取出来呢?
2. 我在网上查了一下,有说用到MediaStore的,能不能不通过MediaStore直接取出来呢?
3. MediaStore是什么呢,我在本地res/raw/的音乐,是被直接放入了MediaStore吗?求解答,先谢了。

解决方案 »

  1.   

    res/raw的资源是被编译到apk中的
    这个资源是属于被剪裁过的应用使用的资源 不一定有你要的信息
    你的mp3播放需要从sd载入文件 mediastore是用来保存文件的信息
    如果不用mediastore 你需要自己去解析mp3文件的头 按照字节去对mp3文件的格式规范
    而且里面还不一定有你要的专辑图像信息
      

  2.   


    谢谢
    看来我必须使用MediaStore了呢。
    再问下哦,我的mp3播放器要怎么从sd载入文件呢?
      

  3.   

    读取存在sd卡中的文件的绝对路径,保存为字符串,
    MediaPlayer就可以使用了。
      

  4.   

    用mediaplayer
    或者自己用扫描sd卡的mp3后缀的文件
    传sd卡目录 然后cursor记录位置 scan mp3文件 
    具体逻辑可以自己研究一下 可参考MediaScannerReceiver 和 MediaScan里面的扫描逻辑
      

  5.   


    这样一说的确有些思路了呢。
    请问一下:在APIdemo里有相关MediaStore的例子吗?
      

  6.   

    我是菜鸟一枚,在CSDN时间不久,希望大家多多帮忙。
      

  7.   


    补充一下:
    mp3的曲名、艺术家和专辑图像这些信息是写在mp3文件中的,即mp3 的tag信息。
    根据不同的ID3标准,这些信息不定写在mp3头,或者尾部。 但是如果mp3的tag信息本身包含图像信息,就一定会解析的到的,无论是自己解析,还是利用其他工具。除非mp3里本身不包含。
    因为我们不能保证用户所下载的MP3都是正版mp3(即全部tag信息都是全的),所以解析不到图像也不要排除该mp3本身就不包含图像信息一般解析操作都是在扫描sd卡时执行完毕,LZ可以参考4L提供的线索。
    补充完毕。
      

  8.   

    一段简化的code, 可以参考一下:
    final String[] ccols = new String[] { MediaStore.Audio.Media._ID };
            String where = MediaStore.Audio.Media.ARTIST_ID + "=" + id + " AND " +
            MediaStore.Audio.Media.IS_MUSIC + "=1";
            ContentResolver resolver = context.getContentResolver();
            resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, ccols, where, null, null);