我在google play上传了一个应用。 This is the link.
它尚未在许多设备上进行测试,因此错误很常见。一位用户今天向我发出消息说,如果打开togglebutton并且仅按下按钮而不按住按钮,应用程序将崩溃。
这是他发给我的logcat文件:
E/MessageQueue-JNI(31135): java.lang.RuntimeException: stop failed.
E/MessageQueue-JNI(31135): at android.media.MediaRecorder.stop(Native Method)
E/MessageQueue-JNI(31135): at com.whizzappseasyvoicenotepad.MainActivity.stopRecording(MainActivity.java:183)
引用:
应用程序并不总是崩溃。有时确实如此,有时却没有。它仅在togglebutton为ON时发生。如果我触摸并按住按钮它工作正常,但如果我只触摸它一会儿它会崩溃。我正在使用Xperia S 4.1.2
我在手机上尝试了这个,我只触摸按钮而不是按住它并且它工作得非常好,我不知道为什么这会发生在他的手机上。
这是onTouchListener的代码:
recBtn.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
startRecording();
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
stopRecording();
nameAlert();
}
return true;
}
});
并且logcat说调用stopRecording时会出现问题,所以这里是stopRecording方法:
public void stopRecording() {
final ImageButton recBtn = (ImageButton) findViewById(com.whizzappseasyvoicenotepad.R.id.recButton);
final ToggleButton tBtn = (ToggleButton) findViewById(R.id.tBtn1);
if (null != recorder) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn);
stopTimer();
tBtn.setEnabled(true);
}
}
我猜测问题是他只触摸按钮一会儿,所以在完全调用startRecording之前,已经调用了stopRecoring,因此它崩溃了因为startRecording甚至还没有完全启动。如果是这样的话,我该如何解决?如果不是这样,那又怎么了?为什么这样的错误出现在另一部手机上而不是我的?
答案 0 :(得分:15)
根据文档,这是正常行为:
public void stop ()
在API级别1中添加停止录制。在start()之后调用它。一旦 录制停止后,您必须再次进行配置,就好像它一样 刚刚建成。 请注意,故意发生RuntimeException 如果没有有效的音频/视频数据,则抛出应用程序 调用stop()时收到。如果调用stop(),则会发生这种情况 启动后立即()。失败让应用程序占用 相应的操作来清理输出文件(删除输出 例如,文件),因为输出文件没有正确构造 当发生这种情况时。
因此,您只需在stop
电话
if (null != recorder) {
try{
recorder.stop();
}catch(RuntimeException ex){
//Ignore
}
...
}