如何与音频的当前持续时间Android异步更改SeekBar的进度?

时间:2013-06-30 22:37:44

标签: android media-player progress seekbar

喜欢标题。我不知道怎么做。我知道我可以使用

mSeekBar.setProgress(mMediaPlayer.getCurrentDuration());

但我不知道如何实现一些监听当前持续时间变化的监听器。我使用MediaPlayer,该类提供了很多听众但不是。

2 个答案:

答案 0 :(得分:0)

有人已经回答了类似的问题here

主要思想是使用在适当的情况下以递归方式调用自身的处理程序。 here是一篇博文,可能会帮助您做到这一点。

答案 1 :(得分:0)

在我的应用程序中,我控制服务中的音乐播放。为了在播放音乐时更新我的​​搜索栏的进度,我创建了一个工作线程,只要我的MediaPlayer不为空并且它的当前位置小于它的总持续时间,就会询问服务该歌曲的当前进度。然后我每隔一秒更新我的搜索栏的进度,并使用处理程序更新它旁边的文本视图。

public void updateSeekBar() {

    // Worker thread that will update the seekbar as each song is playing
    Thread t = new Thread() {
        Handler handler = new Handler();

        @Override
        public void run() {

            // Log.d(TAG, "Updating Seekbar.....");
            int currentPosition = 0;
            int total = (int) PlayerService.getInstance().getDuration();
            seekBar.setMax(total);
            while (PlayerService.getInstance().mp != null
                    && PlayerService.getInstance().mp.getCurrentPosition() < total) {
                try {

                    Thread.sleep(1000);
                    currentPosition = PlayerService.getInstance().mp
                            .getCurrentPosition();
                } catch (InterruptedException e) {
                    return;
                } catch (Exception e) {
                    return;
                }

                seekBar.setProgress(PlayerService.getInstance().mp
                        .getCurrentPosition());

                handler.post(new Runnable() {

                    @Override
                    public void run() {
                        setTimeLeft();
                        setTime();

                    }
                });

            }

        }

    };
    t.start();

}