【发布时间】:2012-01-03 11:17:03
【问题描述】:
每次我开始我的直播时,我都会收到两个 MediaPlayer 错误。
01-03 12:04:35.738: D/PlayerActivity(10164): 播放
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): 在状态 4 中开始调用
01-03 12:04:35.742: E/MediaPlayer(10164): 错误 (-38, 0)
01-03 12:04:35.742: D/PlayerService(10164): onPrepared
01-03 12:04:35.742: D/PlayerService(10164): onCreate 服务
01-03 12:04:35.750: E/MediaPlayer(10164): 错误 (-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 个 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");
}
【问题讨论】:
-
请自行提供代码。
标签: android service media-player