如何在Android中实现MediaPlayer错误重启?
我正在尝试在Android中重新启动MediaPlayer,当出现错误时(与服务器的连接丢失、无法访问网络等)。 我看过很多代码示例,但都有些不标准。我认为必须有标准的方法来重新启动对应的developer.android.com,但现在还不清楚如何设置侦听器,在出现此类错误时重新启动播放器 以下是我的代码部分:如何在Android中实现MediaPlayer错误重启?,android,android-mediaplayer,Android,Android Mediaplayer,我正在尝试在Android中重新启动MediaPlayer,当出现错误时(与服务器的连接丢失、无法访问网络等)。 我看过很多代码示例,但都有些不标准。我认为必须有标准的方法来重新启动对应的developer.android.com,但现在还不清楚如何设置侦听器,在出现此类错误时重新启动播放器 以下是我的代码部分: public class PlayerService extends Service implements OnErrorListener { .... ///////////////
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";
}
}
//////////////
....
}
公共类PlayerService扩展服务实现OnErrorListener{
....
////////////////////
this.mplayer=MediaPlayer.create(c,Uri.parse(url));
mplayer.setOneRorListener(OneRorListener);
////////////////////
MediaPlayer.OnErrorListener OnErrorListener=新的MediaPlayer.OnErrorListener()
{
@凌驾
公共布尔onError(MediaPlayer mp,int what,int extra)
{
Log.e(getPackageName(),String.format(“错误(%s%s)”,what,extra));
playlist=“ERROR”;
重启();
返回true;
}
};
@凌驾
公共布尔onError(MediaPlayer播放器,int what,int extra){
重启();
返回true;
};
公共无效重新启动()
{
尝试
{
playlist=“重新加载”;
对于(int u=1;u概览
我遇到了类似的问题,根据文档,您只需重置媒体播放器即可:
为了重用处于错误状态的MediaPlayer对象并从错误中恢复,可以调用reset()将对象恢复到空闲状态
您当前正在做的是停止和释放(mplayer.stop()
和mplayer.release()
)处于错误状态的媒体播放器。这可能会导致引发类似IllegalStateException的事件。如果它没有引发错误,您仍将尝试在null对象中启动歌曲。您应该使用mplayer.reset()
函数,而不是调用stop和release,然后将变量设置为null
另一个选项是启动一个新的媒体播放器,但详细说明了新实例化的媒体播放器对象与调用了reset()
的媒体播放器对象之间的细微差别
错误后复位
基于此信息,类似于以下内容的内容可以解决您的问题:
public boolean onError(MediaPlayer mp, int what, int extra)
{
Log.e(getPackageName(), String.format("Error(%s%s)", what, extra));
playlist="ERROR";
if(what == MediaPlayer.MEDIA_ERROR_SERVER_DIED)
mp.reset();
else if(what == MediaPlayer.MEDIA_ERROR_UNKNOWN)
mp.reset();
// Deal with any other errors you need to.
// I'm under the assumption you set the path to the song
// and handle onPrepare, start(), etc with this function
playSong(getApplicationContext(),currenturl);
mplayer.setOnErrorListener(this);
mplayer.setOnCompletionListener(this);
mplayer.setOnPreparedListener(this);
return true;
}
有关潜在错误的列表,请参阅媒体播放器常数
设置错误侦听器
关于设置错误侦听器,我过去是如何实现的:
public class MediaPlayerActivity extends Activity implements OnCompletionListener,
OnPreparedListener, AnimationListener, OnErrorListener{
private MediaPlayer mediaPlayer;
@Override
public boolean onError(final MediaPlayer arg0, final int arg1, final int arg2) {
// Error handling logic here
return true;
}
protected void onResume(){
super.onResume();
// do some onResume logic
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
// finish on resume and start up media player
}
}
然后,我在onResume()启动的另一个函数中处理加载媒体播放器的问题。您找到过这个问题的答案吗?我面临着类似的问题。