使用媒体播放器更新进度条

时间:2018-04-04 16:51:44

标签: java android android-mediaplayer android-progressbar

我尝试使用MediaPlayer并在ProgressBar中显示当前位置。媒体播放器本身有效,但ProgressBar没有显示任何内容。以下是代码:

final Uri fileUri = Uri.fromFile(audioFile);
mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
new Thread(new Runnable() {

    @Override
    public void run() {
        try {
            mp.setDataSource(getApplicationContext(), fileUri);
            mp.prepare();
            mp.start();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}).start();


progress = findViewById(R.id.audioProgressBar);
audioDuration = mp.getDuration();
progress.setMax(100);

new Thread(new Runnable() {

        @Override
        public void run() {
            while (progressStatus <= audioDuration) {
                progressStatus += 1;
                handler.post(new Runnable() {
                    public void run() {
                        float progressFloat = ((float) mp.getCurrentPosition() / mp.getDuration()) * 100;
                        progress.setProgress((int) progressFloat);
                    }
                });
                try {
                    // Sleep for 200 milliseconds.
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();

我希望你能帮助我!

1 个答案:

答案 0 :(得分:0)

由于您在不同的线程中初始化mediaPlayer,因此您可能会获得getDuation的值可能为空或不正确,因为您不确定是否已初始化mediaPlayer。

尝试使用以下方法,因为它将消除一次又一次设置最大进度的方法(因为不同的歌曲长度因此setMax将改变)。

将进度最大值设置为100而不是audioDuration。

progress.setMax(100);

然后在你的处理程序中按如下方式计算进度

//current value in the text view
handler.post(new Runnable() {
    public void run() {
        //Calculate progress
        float progress = ((float) mp.getCurrentPosition() / mp.getDuration()) * 100;

        progress.setProgress((int) progress);
    }
});