6

Google Play にアプリをアップロードしました。これがリンクです。

まだ多くのデバイスでテストされていないため、エラーはかなり一般的です。今日、あるユーザーから、トグルボタンがオンになっていて、ボタンを押したままにしておくとアプリがクラッシュするというメッセージがありました。

これは、彼が私に送った 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)

見積もり:

アプリは常にクラッシュするとは限りません。あるときは、そうでないときもあります。トグルボタンがオンの場合にのみ発生します。ボタンを長押しすると正常に動作しますが、少しだけ触れるとクラッシュします。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 がまだ完全に開始されていないためにクラッシュします。その場合、どうすれば修正できますか?そうでない場合、何が問題なのですか?そして、このようなエラーが別の電話に表示されるのに、私の電話には表示されないのはなぜですか?

4

1 に答える 1