Mediaplayer错误:开始在状态4
中调用,每当我开始我的流,我得到两个MediaPlayer错误。Mediaplayer错误:开始在状态4
01-03 12:04:35.738: D/PlayerActivity(10164): play
01-03 12:04:35.742: D/PlayerService(10164): setAudiotStreamType
01-03 12:04:35.742: D/PlayerService(10164): setDataSource
01-03 12:04:35.742: D/PlayerService(10164): prepareAsync
01-03 12:04:35.742: E/MediaPlayer(10164): start called in state 4
01-03 12:04:35.742: E/MediaPlayer(10164): error (-38, 0)
01-03 12:04:35.742: D/PlayerService(10164): onPrepared
01-03 12:04:35.742: D/PlayerService(10164): onCreate Service
01-03 12:04:35.750: E/MediaPlayer(10164): Error (-38,0)
01-03 12:04:38.261: D/PlayerService(10164): onPrepared
在调试标签“播放”中,我点击了播放按钮。 比调用MediaPlayer服务中的“onCreate”,它执行“setAudioStreamTpe”,“setDataSource”,“prepareAsync”,然后onPrepared(myMediaPlayer)。 OnPrepared仅执行mp.start()。之后记录“onPrepared”。然后,在我的服务的“onCreate”结尾,记录“onCreate Service”。
为什么有2准备好了?用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");
}
你不应该调用onCreate()
onPrepared(mp);
,它会被称为一旦MediaPlayer的准备。
public void onCreate() {
mp = new MediaPlayer();
mp.setOnPreparedListener(this);
prepareMediaPlayer();
Log.d(TAG, "onCreate Service");
}
嗯。很简单。谢谢! :) – Leandros 2012-01-03 12:05:34
状态4指Mediaplayer
处于准备状态
,我们调用其他操作,如
Mediaplayer.start()
Mediaplayer.stop()
Mediaplayer.pause()
或任何其他事情。
根据你的代码是Onprepared();
你可以看到,调用
Mediaplayer.prepare()
或
Mediaplayer.prepareAsync()
后,你不需要调用
Mediaplayer.Onprepared()
它将调用onPrepares一旦MediaPlayer正在准备 只是删除
onPrepared(mp);
后
prepareMediaPlayer();
你会好到哪里去
请提供代码本身。 – MByD 2012-01-03 11:18:57
已添加代码。希望能帮助到你! – Leandros 2012-01-03 11:25:32