安卓媒体播放器 : onErrorListener and onCompletionListener working ab-normally

标签 android stream listener android-mediaplayer

我在使用 MediaPlayer 的 Android 服务类中有此代码部分。当我启动播放器并在播放一段时间后将手机转到飞行模式(用于模拟网络错误)时,onCompletion 监听器会在一段时间内触发。但是 onError 不会触发任何 IO 错误。

此外,当网络从 Wi-Fi 切换到 3G 并返回时,流停止,但没有错误,onCompletion 也不起作用!尽管播放已停止。为什么会这样?代码有什么问题?这可以取决于电话吗? Android 2.3.5、HTC 资源管理器。显然播放停止了,但没有错误,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();

我该如何解决这个问题?

最佳答案

首先准备MediaPlayer:

mPlayer.prepareAsync();

然后启动MediaPlayer:

mPlayer.start();

关于安卓媒体播放器 : onErrorListener and onCompletionListener working ab-normally,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866794/

相关文章:

ios - Swift FireStore Listener 在第二次加载应用程序时抛出错误

jms - Spring DefaultMessageListenerContainer - 监听器不读取 Websphere MQ 上的消息

java - 在 Android 中以编程方式调用监听器调用

android - Appwidget 大小计算

asynchronous - 无法看到在julia @spawn方法内发生的错误

stream - 使用WebFlux的响应zip文件

java - 从未知路径读取文件

安卓。单选按钮文本无法正确显示

Android Maven 编译失败

java - 如何仅在应用程序启动时调用方法?请查看详情