我在做一个安卓的音乐播放器,但是要求要遍历系统所有的MP3文件,以前只做过遍历sdcard中的,要用什么方法获取系统中的啊?还有就是要求要在音乐列表中显示文件的时长,以前只会用getduration();方法,现在在播放之前就要获取时长,怎么才能得到?求大神解答,急,,,,,,,,,,,音乐遍历Androidmp3

解决方案 »

  1.   

    你要的时长可不可以去media多媒体数据库查一下,internal的数据库是存放系统铃声的,既然你做过sdcard的,系统的应该原理是一样的吧,MediaScanner也可以尝试下
      

  2.   

    用ContentResolver去query MediaStore.Audio.Media.EXTERNAL_CONTENT_URI这个数据库
    MediaStore.Audio.Media.TITLE 字段是曲名
    MediaStore.Audio.Media.ARTIST 字段是歌手
    MediaStore.Audio.Media.ARTIST 字段是专辑
    MediaStore.Audio.Media.DURATION 字段是时间 单位是毫秒
    MediaStore.Audio.Media.DATA 字段是文件位置
    MediaStore.Audio.Media.DISPLAY_NAME 字段是显示名称
      

  3.   

    我已经得到了MP3的一个文件对象,我想在想查询他的时长,用以下代码:您看这样对吗?ContentResolver mResolver = ctx.getContentResolver(); Cursor cursor = mResolver.query(MediaStore.Audio.Media.DURATION , null, null, null, null);
    我想问下,query方法的第二个参数说是用string[]数组代替,这是在哪获取的?
      

  4.   

    字段名就在MediaStore.Audio.Media里
    例如常量MediaStore.Audio.Media.TITLE
    其值是一个String 就是曲名的字段名
      

  5.   

    不对
    用contentResolver.query()方法访问数据库直接得到的是满足selection的所有曲目
    返回的结果是一个cursor
    你需要自己遍历这个cursor来获得这些曲目每一条的所有信息
    例如这个方法可以获取手机上包括SD卡中所有长度大于10秒且是音乐的音频文件
    private ArrayList<Music> queryMusics() {
    ArrayList<Music> musiclistResult = new ArrayList<Music>();
    ContentResolver cr = this.getContentResolver();
    Cursor musics = cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
    new String[] {
    MediaStore.Audio.Media._ID, // int
    MediaStore.Audio.Media.TITLE,
    MediaStore.Audio.Media.ARTIST,
    MediaStore.Audio.Media.ALBUM,
    MediaStore.Audio.Media.DURATION,
    MediaStore.Audio.Media.DATA, // String
    MediaStore.Audio.Media.DISPLAY_NAME, // String
    MediaStore.Audio.Media.MIME_TYPE // String
    },
    MediaStore.Audio.Media.IS_MUSIC + " = 1 AND "
    + MediaStore.Audio.Media.DURATION + " > 10000",
    null,
    MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
    Log.d("", "musics : " + musics.getCount()); musics.moveToFirst();
    while (!musics.isAfterLast()) {
    Music temp = new Music();
    temp._ID = musics.getInt(musics.getColumnIndex(MediaStore.Audio.Media._ID));
    temp.ALBUM = musics.getString(musics.getColumnIndex(MediaStore.Audio.Media.ALBUM));
    temp.ARTIST = musics.getString(musics.getColumnIndex(MediaStore.Audio.Media.ARTIST));
    temp.DATA = musics.getString(musics.getColumnIndex(MediaStore.Audio.Media.DATA));
    temp.DURATION = musics.getLong(musics.getColumnIndex(MediaStore.Audio.Media.DURATION));
    temp.TITLE = musics.getString(musics.getColumnIndex(MediaStore.Audio.Media.TITLE));
    temp.isExist = true; musiclistResult.add(temp);
    musics.moveToNext();
    }
    musics.close();
    return musiclistResult;
    }
    /**
     * 音乐的信息
     * 
     * @author BabyBeaR
     */
    @SuppressWarnings("unused")
    private class Music {
    int _ID;
    long DURATION;
    boolean isExist;
    String TITLE, ARTIST, ALBUM, DATA;
    }
      

  6.   

    明白了,感谢您的解答!
    还有一个问题想请教您一下,怎样用service实现歌词同步?昨天在下载专区下了一个例子,但是实现不了,狠郁闷,能发个例子到我邮箱吗?谢谢了! 邮箱:[email protected]