Tra*_*y11 5 android stream listener android-mediaplayer
我在使用MediaPlayer的Android Service类中有此代码部分。当我启动播放器并在播放了一段时间后(为了模拟网络错误)将手机转到飞行模式时,onCompletion监听器会在一段时间后触发。但是onError不会触发任何IO错误。
此外,当将网络从Wi-Fi更改为3G并返回时,流将停止,但是没有错误,onCompletion也无法正常工作!尽管播放已停止。为什么会这样?代码有什么问题?这可以取决于电话吗?Android 2.3.5,HTC Explorer。显然,播放已停止,但没有错误,onCompletion也不会触发。
public class PlayerService extends Service implements MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener {
///
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
this.playlist="ONERROR";
switch (what){
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
Log.e(TAG2, "unknown media playback error");
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Log.e(TAG2, "server connection died");
default:
Log.e(TAG2, "generic audio playback error");
break;
}
switch (extra){
case MediaPlayer.MEDIA_ERROR_IO:
Log.e(TAG2, "IO media error");
break;
case MediaPlayer.MEDIA_ERROR_MALFORMED:
Log.e(TAG2, "media error, malformed");
break;
case MediaPlayer.MEDIA_ERROR_UNSUPPORTED:
Log.e(TAG2, "unsupported media content");
break;
case MediaPlayer.MEDIA_ERROR_TIMED_OUT:
Log.e(TAG2, "media timeout error");
break;
default:
Log.e(TAG2, "unknown playback error");
break;
}
return true;
}
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
this.playlist="COMPLETED";
}
///
this.mplayer = MediaPlayer.create(c, Uri.parse(url));
this.mplayer.setOnErrorListener(this);
this.mplayer.setOnCompletionListener(this);
this.mplayer.start();
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
首先,准备MediaPlayer:
mPlayer.prepareAsync();
Run Code Online (Sandbox Code Playgroud)
然后启动媒体播放器:
mPlayer.start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4491 次 |
| 最近记录: |