android - Mediaplayer 进度更新到 seekbar 不顺畅?

标签 android media-player progress seekbar smoothing

我正在开发一个带有录音机和播放器的应用程序。我正在使用 mediaplayer 播放录制的 .wav 文件,同时我想更新到搜索栏。一切正常但我的问题是媒体播放器对搜索栏的进度更新并不顺利,如果我们正在播放一个小文件,搜索栏的拇指会在几秒钟内或之间跳跃。

任何人都可以帮助我解决问题,以使其在搜索栏中顺利搜索进度。我的代码如下所示。我被卡在这里了。

    mediaPlayerIntiate();
    mediaPlayerSetSource();
    mMediaPlayer.start();
    task = new TimerTask() {
                @Override
                public void run() {
                    Graphbar.post(new Runnable() {
                        @Override
                        public void run() {

                            if (mMediaPlayer != null) {

                                if (playButtonState == MediaMode.PLAY) {
                                    if (mMediaPlayer.isPlaying()) {
                                        Graphbar.setProgress(mMediaPlayer
                                                .getCurrentPosition());
                                        mediaPlayerUpdateTimer(mMediaPlayer
                                                .getCurrentPosition());
                                        enableRewindandForward();
                                    }
                                }

                            }

                        }
                    });
                }
            };
            timer = new Timer();
            timer.schedule(task, 0, 8);

最佳答案

mMediaPlayer.getCurrentPosition() 返回当前时间(以毫秒为单位),您将其更新为最大容量为 100 的 Seekbar。用文件长度和 100 制作一个公式。试试这个函数

    MediaPlayer mMediaPlayer = new MediaPlayer();
    final SeekBar mSeelBar = new SeekBar(this);
    final int duration = mMediaPlayer.getDuration();
    final int amoungToupdate = duration / 100;
    Timer mTimer = new Timer();
    mTimer.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    if (!(amoungToupdate * mSeelBar.getProgress() >= duration)) {
                        int p = mSeelBar.getProgress();
                        p += 1;
                        mSeelBar.setProgress(p);
                    }
                }
            });
        };
    }, amoungToupdate);

并且这个过程应该在媒体播放器开始播放时被调用。里面

    mediaPlayer.setOnPreparedListener(new OnPreparedListener(){

        @Override
        public void onPrepared(MediaPlayer mp) {
        **// call here**
        }
    });

更新

在几秒钟内更新 125 次不是你应该做的。请增加更新 SeekBar 的间隔。我在阅读 NullPointer 的评论后添加了这个

关于android - Mediaplayer 进度更新到 seekbar 不顺畅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742477/

相关文章:

android - 如何将 Google Glass 屏幕镜像到 PC/Mac?

android - 这可能吗,GNOME (lib)Clutter with OpenGL ES & Vulkane?

android - 如何直接从 res/raw 文件夹播放音频文件?

android - MediaPlayer.release()后SurfaceView是否可以复用?

cocoa - CAAnimation 在周期性动画进度间隔中调用方法?

android - unityLibrary :compileDebugJavaWithJavac

android - DatabaseReference#push() 方法在不同位置有何不同?

android - 使用 MediaRecorder 写入缓冲区或 FIFO

Java 任务进度属性错误?

android - 垂直搜索栏 setProgress 不起作用