エラーが発生した場合(サーバーとの接続が失われた、ネットワークに到達できないなど)、AndroidでMediaPlayerの再起動を実装しようとしています。多くのコード例を見てきましたが、どれも標準的ではありません。developer.android.com に対応する標準的な再起動方法が必要だと思いますが、ここからは明確ではありません。このようなエラーでプレーヤーを再起動するリスナーを設定する方法です。
これが私のコードの一部です:
public class PlayerService extends Service implements OnErrorListener {
....
////////////////////
this.mplayer = MediaPlayer.create(c, Uri.parse(url));
mplayer.setOnErrorListener(onErrorListener);
////////////////////
MediaPlayer.OnErrorListener onErrorListener = new MediaPlayer.OnErrorListener()
{
@Override
public boolean onError(MediaPlayer mp, int what, int extra)
{
Log.e(getPackageName(), String.format("Error(%s%s)", what, extra));
playlist="ERROR";
restart();
return true;
}
};
@Override
public boolean onError(MediaPlayer player, int what, int extra) {
restart();
return true;
};
public void restart()
{
try
{
playlist="RELOADING";
for (int u=1; u<=5; u++)
{
Thread.sleep(5000);
mplayer.stop();
mplayer.release();
mplayer=null;
playSong(getApplicationContext(),currenturl);
};
}
catch (Exception e)
{
playlist="RELOADING ERROR";
}
}
//////////////
....
}
リスナーを正しく設定していますか? onError関数をどこに置くべきかわからないので、2つ持っています。電話をフライトモードに設定してエラーをエミュレートすると、リスナーは「RELOADING」および「RELOADING ERROR」というタイトルを起動します。ただし、ネットワークがオンになった後、プレーヤーの再起動は発生しません。音が出ません。
ここで何が問題なのですか?プレーヤーを再起動できません。
コードを実行可能にするのを手伝ってください。また、接続スキップと IO 例外の可能性もあります。