通过MediaPlayer 的 getDuration() 是可以获取MP3的播放时长,
但是遍历MP3文件的时候就需要new 一个player 对象不知道还有没有其他方式获取MP3文件播放时长下面是我的代码
public static MediaPlayer player;/**
 * 获取音乐播放时长
 * @return
 */
private String getMusicTime() {
int musicTime = player.getDuration() / 1000;
return musicTime / 60 + ":" + musicTime % 60;
}

解决方案 »

  1.   

    直接查数据库
    时长是放在media的数据库的
      

  2.   


    是不是先遍历音乐文件,然后把音乐文件的信息保存到数据库里然后以后每次生成activity 绑定listview 时,都匹配下数据库信息然后有新的音乐文件作更新?这样也觉得繁琐有没有直接得到文件了,可以直接读取时长的方法
      

  3.   

    http://topic.csdn.net/u/20070625/17/df6590cd-41a2-407d-9356-a6dace17fbd4.htmlC++的实现
      

  4.   

    直接读就可以
    String[] mCursorCols = new String[] { MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
    MediaStore.Audio.Media.DURATION }; mCursor = getContentResolver().query(MUSIC_URL, mCursorCols,
    null, null, null);
    // 获取歌曲播放时长
    public int getDurationByPosition(Cursor c, int position) {
    c.moveToPosition(position);
    int durationIndex = c.getColumnIndex(MediaStore.Audio.Media.DURATION);
    int info = c.getInt(durationIndex) / 1000;
    return info;
    }
      

  5.   

    MediaStore.Audio.Media.DURATION
    就是数据库中标示播放时长的字段。
    直接读出来,遍历cursor就可以取到了。
    你说的new 一个player 对象是在取得正在播放的那首音乐的时长。
      

  6.   

    恩,谢谢楼上的找到了另外一种实现大家有空也可以研究下 http://javamusictag.sourceforge.net不过遇到了文件的权限问题
    暂时先不研究了,谢谢 ameyume
      

  7.   

    http://hi.baidu.com/ethancheer/blog/item/359009dcf11d0cd28c102979.htmlMediaStore 详细说明
      

  8.   

    videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()  {
                @Override
                public void onPrepared(MediaPlayer mp) {                         
                    long duration = videoView.getDuration();
                }
            });