Cómo identificar la llamada entrante y la llamada saliente en android

Cómo obtener los eventos de llamadas entrantes y salientes en android por separado. En realidad yo estaba tratando de desarrollar una aplicación que se abren en la llamada entrante si el número existe en la base de datos y funciona bien. Pero si llamo desde el dispositivo (llamada saliente) y si el número existe en la base de datos todavía abre mi aplicación. Quiero restringir para abrir mi aplicación en la llamada saliente.

Mi manifiesto contiene recibir una llamada entrante como esto:

<receiver android:name=".IncomingCallReceiver" > <intent-filter > <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> 

IncomingCallReceiver:

 MyPhoneStateListener phoneListener=new MyPhoneStateListener(context); TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE); 

MyPhoneStateListener:

 public void onCallStateChanged(int state,String incomingNumber){ switch(state) { case TelephonyManager.CALL_STATE_IDLE: Log.d("DEBUG", "IDLE"); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.d("DEBUG", "OFFHOOK"); Intent i = new Intent(context, MyMainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); break; case TelephonyManager.CALL_STATE_RINGING: Log.d("DEBUG", "RINGING"); break; } } 

¿Puede alguien ayudarme a diferenciar la llamada saliente de la llamada entrante por lo que voy a manejar estos eventos.

Gracias por adelantado.

Quiero restringir para abrir mi aplicación en la llamada saliente.

En el case TelephonyManager.CALL_STATE_OFFHOOK: compruebe si el estado anterior era CALL_STATE_RINGING o CALL_STATE_IDLE (por ejemplo, por configuración, un CALL_STATE_IDLE distinto en ambos casos).
En este último caso proceda con la apertura de su solicitud, de lo contrario no hacer nada

Agregue <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> en su receptor y onReceive() en su método onReceive() .

 <receiver android:name=".IncomingCallReceiver" > <intent-filter > <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver> 

La acción de intención android.intent.action.NEW_OUTGOING_CALL procesa las llamadas salientes, pero para la llamada entrante sugiero que lo compruebe de esta manera:

 if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { //outgoing call } else if (intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER) != null) { //incoming call } 
  • API de geocodificación de Android BroadcastReceiver no activado
  • Android capturando el volumen hacia arriba / hacia abajo presiona teclas en receptor de difusión?
  • Usando getWindowManager () dentro de BroadcastReceiver
  • BroadcastReceiver nunca llamó
  • Java.lang.InstantiationException: class no tiene constructor de argumento cero
  • ¿Cómo crear un diálogo de alerta desde la clase BroadcastReceiver?
  • Detección de cambios en el tipo de red (TelephonyManager) en android
  • ¿Cómo detectar cuando el usuario activa / desactiva el estado del GPS?
  • ANR Difusión de Intención {act = android.intent.action.SCREEN_OFF flg = 0x50000010}
  • Android: Cómo detectar la transmisión "Activar el almacenamiento USB"?
  • Mantener el receptor de difusión funcionando después de cerrar la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.