Я пытаюсь определить и перенести на активность после начала исходящего вызова. Я использовал ACTION_NEW_OUTGOING_CALL
в фильтре Intent. Однако как csn я идентифицирую, что вызов является исходящим. Я сделал это для входящего вызова (как показано ниже), но что я могу использовать вместо EXTRA_STATE_RINGING
.
public class OutgoingBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { Intent i = new Intent(context, OutgoingCallScreenDisplay.class); i.putExtras(intent); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } }
public class OutgoingBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { // If it is to call (outgoing) Intent i = new Intent(context, OutgoingCallScreenDisplay.class); i.putExtras(intent); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } }
ACTION_NEW_OUTGOING_CALL – это константа, объявленная в классе Intent
, а не в TelephonyManager
. Когда появляется исходящий вызов, система передает намерение с этой константой. Если вы действительно хотите поймать исходящий вызов с помощью TelephonyManager
выполните следующие действия:
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE); tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); PhoneStateListener listener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { // TODO Auto-generated method stub super.onCallStateChanged(state, incomingNumber); switch(state) { case TelephonyManager.CALL_STATE_IDLE: break; case TelephonyManager.CALL_STATE_OFFHOOK: if(incomingNumber==null) { //outgoing call } else { //incoming call } break; case TelephonyManager.CALL_STATE_RINGING: if(incomingNumber==null) { //outgoing call } else { //incoming call } break; } } };
Обнаружение исходящего вызова по телефону
1. Создайте OutgoingCallBroadcastReceiver
public class OutgoingCallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(OutgoingCallReceiver.class.getSimpleName(), intent.toString()); Toast.makeText(context, "Outgoing call catched!", Toast.LENGTH_LONG).show(); //TODO: Handle outgoing call event here } }
2. Зарегистрируйте OutgoingCallBroadcastReceiver в AndroidManifest.xml
<receiver android:name=".OutgoingCallReceiver" > <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>
3. Добавить разрешение в AndroidManifest.xml
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>