Запись голоса (только микрофон) при входящем или исходящем звонке - PullRequest
2 голосов
/ 28 октября 2011

Я следую примеру Запись телефонных звонков на телефон Android? и помещаю его в BroadcastReceiver , чтобы попытаться записать голос MIC (я знаю, что он все еще ограничен для записи других сторона), когда телефонный звонок входящий и исходящий. Мой вопрос: как я могу получить состояние, когда пользователь поднимает трубку. Потому что, когда он звонит, он также перейдет к действию "android.intent.action.PHONE_STATE".

Мой код :

public class PhoneCallReceiver extends BroadcastReceiver 
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        String action = intent.getAction();
        if (action.equals("android.intent.action.PHONE_STATE") 
        {
            // Phone call recording
            try {
                recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                recorder.setOutputFile(<my output dir>);
                recorder.prepare();
                recorder.start();
                recordStarted = true;
                telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
                telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
            } catch(Exception ex) {

            }
        } 
    }
}


private final PhoneStateListener phoneListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        try {
            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING: {
                    // 
                    break;
                }
                case TelephonyManager.CALL_STATE_OFFHOOK: {
                    // 
                    break;
                }
                case TelephonyManager.CALL_STATE_IDLE: {
                    if (recordStarted) {
                        recorder.stop();
                        recordStarted = false;
                    }
                    break;
                }
                default: { }
            }
        } catch (Exception ex) {
        }
    } 
};

код в AndroidManifest.xml

<receiver android:name=".PhoneCallReceiver" android:enabled="true">
    <intent-filter android:priority="1000">
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

На основе Android 2.1 SDK и протестировано в HTC EVO 4G (Android 2.2)

Ответы [ 2 ]

1 голос
/ 13 апреля 2013

Если вы хотите записать голос с обоих концов, используйте (в соответствии с Android Docs)

recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);

Я не пробовал это, но надеюсь, будет работать для вас и ответить на ваш вопрос, вы смотрели функцию getCallState() из TelephonyManager?

0 голосов
/ 28 октября 2011

Вы можете использовать действие android.intent.action.ANSWER вместо действия android.intent.action.PHONE_STATE.Вы можете записать голос при ответе на звонок.

...