我正在尝试在发生错误时(与服务器的连接丢失、网络无法访问等)在 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 异常。