5

MediaPlayerを使用するAndroid Serviceクラスにこのコード部分があります。プレーヤーを起動し、(ネットワーク エラーのエミュレートのために) しばらく再生した後、電話をフライト モードにすると、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();

どうすればこれを修正できますか?

4

1 に答える 1