Я следую примеру Record phone calls on android phone? и поставлю его на BroadcastReceiver, чтобы попытаться записать голос MIC (я знаю, что он по-прежнему ограничен для записи на другой стороне), когда телефон вызов входящего и исходящего. Мой вопрос: как я могу получить состояние, когда пользователь забирает телефон. Потому что, когда он звонит, он также перейдет к действию «android.intent.action.PHONE_STATE».Запись голоса (только MIC) при поступлении входящего или исходящего звонка
Мой код:
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)
спасибо. Но я обнаружил, что он вызывает состояние TelephonyManager.CALL_STATE_OFFHOOK, когда я набираю телефонный звонок и умысел .getAction() никогда не становится android.intent.action.ANSWER, но всегда android.intent.action.PHONE_STATE. Btw, я разрабатываю с 2.1 SDK и тестирую его на Android 2.2 (HTC EVO 4G) –