我正在使用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
答案 0 :(得分:1)
在致电MediaPlayer.setDataSource
后,您应该使用MediaPlayer.reset
。请注意,MediaPlayer.create
方法只是调用MediaPlayer.setDataSource
的辅助方法,并且可以用来播放一个媒体。在下面的示例中,上下文是您的活动,因此您可以使用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);