我正在尝试处理一个媒体播放器错误,当错误发生时,我想烤一条消息,然后播放下一首歌曲,但是每当错误发生时,它就会崩溃。
这是我正在尝试的代码
public class player1 extends ActionBarActivity implements View.OnClickListener,OnErrorListener{
MediaPlayer mp;
ArrayList<File> mySongs;
int position;
Uri u;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
Intent i = getIntent();
Bundle b = i.getExtras();
mySongs = (ArrayList) b.getParcelableArrayList("songlist");
position = b.getInt("pos", 0);
u = Uri.parse(Uri.encode(mySongs.get(position).toString()));
mp = MediaPlayer.create(getApplicationContext(), u);
mp.start();
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
String errorWhat;
switch(what){
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
errorWhat = "MEDIA_ERROR_UNKNOWN";
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
errorWhat = "MEDIA_ERROR_SERVER_DIED";
break;
default:
errorWhat = "!";
}
String errorExtra;
switch(extra){
case MediaPlayer.MEDIA_ERROR_IO:
errorExtra = "MEDIA_ERROR_IO";
break;
case MediaPlayer.MEDIA_ERROR_MALFORMED:
errorExtra = "MEDIA_ERROR_MALFORMED";
break;
case MediaPlayer.MEDIA_ERROR_UNSUPPORTED:
errorExtra = "MEDIA_ERROR_UNSUPPORTED";
break;
case MediaPlayer.MEDIA_ERROR_TIMED_OUT:
errorExtra = "MEDIA_ERROR_TIMED_OUT";
break;
default:
errorExtra = "!";
}
Toast.makeText(player1.this,
"Error" + "n"
+ errorWhat + "n"
+ errorExtra,
Toast.LENGTH_LONG).show();
//release
mp.stop();
mp.release();
initMediaPlayer();
return true;
};
private void initMediaPlayer() {
Toast.makeText(player1.this,
"playomng next song",
Toast.LENGTH_LONG).show();
position = (position + 1)%mySongs.size();
u = Uri.parse(Uri.encode(mySongs.get(position).toString()));
mp = MediaPlayer.create(getApplicationContext(), u);
mp.start();
}
}
如何在不强制媒体播放器关闭的情况下处理这些错误?
与其把创可贴贴在代码上,不如找出真正的问题在哪里。如果你能找到你收到错误的那一行,你可以简单地将代码包装在
中。try{
//code that crashes here
}
catch(Exception e){
Toast.makeText(context, "Media error", LENGTH_SHORT).show();
}
编辑:请注意,仅仅通过try/catch来防止崩溃本身就会导致bug。如果你能张贴你的日志,我们也许能找出你的实际错误是什么。
- 没有logcat我们不能说太多,但是你没有设置播放器听错误
mp.setOnErrorListener(this);
. - 我认为你的崩溃可能是
i.getExtras();
,它可以是null,因此调用b.getParcelableArrayList("songlist");
可能只是崩溃你的应用程序。