0

通話録音アプリを作成しています。通話録音を停止しようとすると、Java のデバッグ コンソールに次のように表示されます。「無効な状態で呼び出された MediaRecorder の停止: 4」それは私を助けることができます! 私はすでに権限を使用RECORD_AUDIOしています!WRITE_EXTERNAL_STORAGEここに私のコードの一部があります:

private class PhoneCallListener extends PhoneStateListener {
    private boolean isPhoneCalling = false;
    @SuppressWarnings("deprecation")
    @Override
    public void onCallStateChanged(int state, final String incomingNumber) {
        // TODO Auto-generated method stub
        super.onCallStateChanged(state, incomingNumber);
        String path = Environment.getExternalStorageDirectory()+"/callrec/";
        final MediaRecorder recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(path+"/TEST00000000011110.M4A");
        if (TelephonyManager.CALL_STATE_RINGING == state) {

        }
        if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
            isPhoneCalling = true;
            try {
                recorder.prepare();
                recorder.start();
            } catch (Exception e) {
            }
        }
        if (TelephonyManager.CALL_STATE_IDLE == state) {
            if (isPhoneCalling) {
                try {
                    recorder.stop();
                    recorder.reset();
                    recorder.release();
                } catch (Exception e) {
                    // TODO: handle exception
                }
                Intent i = getBaseContext().getPackageManager()
                        .getLaunchIntentForPackage(
                                getBaseContext().getPackageName());
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
                isPhoneCalling = false;
            }
        }
    }
}
4

1 に答える 1