每次我开始我的流时,我都会收到两个 MediaPlayer 错误。
在调试标签“播放”处,我单击了播放按钮。
比我在 MediaPlayer 服务中的“onCreate”被调用,它执行“setAudioStreamTpe”、“setDataSource”、“prepareAsync”,然后是 onPrepared(myMediaPlayer)。
OnPrepared 只执行 mp.start()。之后记录“onPrepared”。然后,在我的服务的“onCreate”结束时,记录“onCreate Service”。
为什么有2个onPrepared?!使用 mp.prepare() 我没有错误。
编码:
@Override
public void onCreate() {
mp = new MediaPlayer();
mp.setOnPreparedListener(this);
prepareMediaPlayer();
onPrepared(mp);
Log.d(TAG, "onCreate Service");
}
public void prepareMediaPlayer()
{
try {
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
Log.d(TAG, "setAudiotStreamType");
mp.setDataSource(PlayerActivity.soundUrl);
Log.d(TAG, "setDataSource");
mp.prepareAsync();
Log.d(TAG, "prepareAsync");
}
catch (IOException e) {}
catch (IllegalArgumentException e) {}
catch (IllegalStateException e) {}
}
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
if (PlayerService.mp.isPlaying() == true){
notification();
PlayerActivity.mpState = PlayerActivity.PLAYING;
}
Log.d(TAG, "onPrepared");
}
最佳答案
你不应该在 onPrepared(mp);
中调用 onCreate()
,它会在 MediaPlayer 准备好后被调用。
public void onCreate() {
mp = new MediaPlayer();
mp.setOnPreparedListener(this);
prepareMediaPlayer();
Log.d(TAG, "onCreate Service");
}
关于android - 媒体播放器错误 : start called in state 4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8711455/