我正在使用一个简单初始化的 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/