Запись звонка никогда не заканчивается - PullRequest
0 голосов
/ 10 февраля 2012

за это время у меня возникла другая проблема, у меня есть приложение для Recording Call, но Recorder.start () никогда не заканчивается. Вот код для записи:

    recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile(path);
    recorder.setMaxDuration(1000);
    recorder.prepare();
    recorder.start();

эта часть кода выполняется при нажатии кнопки для вызова номера. Но когда я нажимаю кнопку завершения вызова в AVD, этот код никогда не запускается:

        phoneListener = new PhoneStateListener()
        {
            @Override
            public void onCallStateChanged(int state, String incomingNumber)
            {
                switch (state) 
                {
                    case TelephonyManager.CALL_STATE_IDLE:
                        currentPhoneState = "CALL_STATE_IDLE";
                    break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        currentPhoneState = "CALL_STATE_OFFHOOK";
                    break;
                    case TelephonyManager.CALL_STATE_RINGING:
                        currentPhoneState = "CALL_STATE_RINGING";
                    break;
                }

                _fileTrace.onTrace("INFO", "CallState: ", currentPhoneState, null);
                if (currentPhoneState == "CALL_STATE_OFFHOOK")
                {                       
                    llamada = true;
                    _fileTrace.onTrace("INFO", "Recording Start", currentPhoneState, null);
                    try {
                        recorder.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (llamada && currentPhoneState == "CALL_STATE_IDLE") {
                    _fileTrace.onTrace("INFO", "CallState: ", currentPhoneState, null);
                    recorder.stop();
                }                   
            }
        };      
        _CurrTelephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);

К вашему сведению: первый фрагмент кода находится во вспомогательном классе, а второй - в упражнении.

Я надеюсь, что кто-то может мне помочь. Спасибо всем!

1 Ответ

1 голос
/ 10 октября 2013

Я использую следующий код, и он работал:

    public void onReceive(Context context, Intent intent) {
    // Toast.makeText(context, "calling now", Toast.LENGTH_LONG).show();
    if (!intent.getAction().equals("android.intent.action.PHONE_STATE"))
        return;
    else {
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            log.d(TAG, "RINGING NOW")

            return;
        } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
            StartRecording();
            Log.d(TAG, "CALL ANSWERED NOW");
            return;
        } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
            Log.d(TAG, "ALL DONE IN ELSE IF...... !!");
            StopRecording();
        } else {
            Log.d(TAG, "ALL DONE IN ELSE ...... !!");

        }
    }
}
...