如何处理运行异常在播放音频文件吗?
-
20-09-2019 - |
题
我有一个按钮播放音频文件在其击的听众。如果按钮被点击一次又一次的话音频文件播放,然后应用程序的崩溃。该解决方案是什么?
这里是一些代码,以供参考:
private OnClickListener btnMercyListener = new OnClickListener()
{
public void onClick(View v)
{
// Toast.makeText(getBaseContext(),
// "Mercy audio file is being played",
// Toast.LENGTH_LONG).show();
if (status==true)
{
mp.stop();
mp.release();
status = false;
}
else
{
mp = MediaPlayer.create(iMEvil.this,R.raw.mercy);
//mp.start();
try{
mp.start();
status= true;
//mp.release();
}catch(NullPointerException e)
{
Log.v("MP error",e.toString());
}
}
mp.setOnCompletionListener(new OnCompletionListener(){
// @Override
public void onCompletion(MediaPlayer arg0) {
mp.release();
status = false;
}
}
);
}
};
解决方案
两件事情:
1.调试崩溃,看看它的失败(其行)。
2.环绕整个声明有一个尝试/赶上和根本抓住一个 异常.
如果你有一个例外或更好的主意你的代码是失败的,然后,它会更容易得到你的意见如何解决它...事实上,你甚至可能不需要的建议来解决这个问题,你最终可能会解决该问题通过自己,然后你将会收获的果实的自己的成功。
更新每评论:
该文件 媒体播放器 表示可能是什么问题给予的症状运的是看到:
停止播放,呼叫
stop()
.如果你想以后重播媒体,然后 你必须reset()
和prepare()
的MediaPlayer
目前的呼叫start()
再次。(create()
电话prepare()
第一时间)。
它看起来像如果玩按钮被按下过很多次,然后媒体可能最终不是在准备状态和因此引发一些例外。这个想法的禁止播放键是有效的并且它应该照顾这种情况。
以下是一些说明代码你想要什么你的计划要做到:
private OnClickListener btnMercyListener = new OnClickListener()
{
public void onClick(View v)
{
if(isPressed)
{
return;
}
isPressed = true;
// create your media player
mp = MediaPlayer.create(iMEvil.this,R.raw.mercy);
// set your listener
mp.setOnCompletionListener(mp.setOnCompletionListener(new OnCompletionListener(){
// @Override
public void onCompletion(MediaPlayer arg0) {
if(!isPressed)
{
return;
}
isPressed = false;
// re-enable your play button
playButton.enable();
// disable the pause button
pauseButton.disable();
mp.release();
mp.prepare();
}
}
);
// disable the play button
playButton.disable();
// enable the pause button
pauseButton.enable();
// start playback
mp.start();
}
};
你当然应该有适当的尝试/赶上的发言那么你的应用程序不会崩溃,但该代码应该给你一个总的思想什么就做什么。
不隶属于 StackOverflow