android - 如何正确更改 Android MediaPlayer 实例的当前轨道?

标签 android android-mediaplayer

我正在使用一个简单初始化的 Android MediaPlayer 实例:

mediaPlayer = MediaPlayer.create(this,R.raw.conrnfield);

我还得到了这个 Thread 根据轨道播放进度更新 SeekBar

    updateTime = new Runnable() {
        @Override
        public void run() {

            int currentPosition = 0;
            int total = mediaPlayer.getDuration();
            seekBar.setMax(total);

            while (mediaPlayer != null && currentPosition < total) {

                try {
                    Thread.sleep(500);
                    currentPosition = mediaPlayer.getCurrentPosition();

                }
                catch (InterruptedException ex) {return;}
                catch (Exception e) {return;}

                seekBar.setProgress(currentPosition);
            }
        }
    };

我得到了一个改变当前轨道的方法:

public void changeSong(View view) {

        mediaPlayer.reset();
        mediaPlayer.start();
        mediaPlayer.selectTrack(2);

}

但是,当我调用此方法时,它会导致应用程序崩溃。我可以首先在日志中看到一个

java.lang.IllegalStateException: Could not execute method of the activity

堆栈跟踪中的错误消息。

我什至不知道我的方法是否错误。这是整个log

最佳答案

您应该在调用 MediaPlayer.reset 之后使用 MediaPlayer.setDataSource。请注意,MediaPlayer.create 方法只是调用 MediaPlayer.setDataSource 的辅助方法,并且假定用于播放一个媒体。在以下示例中,上下文是您的 Activity,因此您可以将它们替换为 MainActivity.this

Uri uri = new Uri.Builder()
    .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
    .authority(context.getPackageName())
    .appendPath(String.valueOf(R.raw.conrnfield))
    .build();
mediaPlayer.setDataSource(context, uri);

关于android - 如何正确更改 Android MediaPlayer 实例的当前轨道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28350149/

相关文章:

java - Java 代码在单个线程中的执行是否保证是顺序的?

android - 在 EditTextPreference 中禁用对话框,改为启动 Intent

android - 如何在水平 LinearLayout 中正确对齐 TextView 和 EditText?

android - Android : change visual properties (e. g 中的视频。饱和度、亮度)

android - 使用 setNextMediaPlayer 的音频播放问题

android - react-native android bundle 版本无法在某些设备上运行

android - 生成可在 Android 和 iOS 上播放的视频

Androids MediaPlayer 在 Activity 进入时每隔一秒播放一次视频

android - 在 OnCompletionListener 中使用 MediaPlayer get 添加对象

android - 如何修复 'media button receiver could not be found' 异常