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 } 
  • Inicio del servicio desde BroadcastReceiver
  • La aplicación de Android A quiere realizar el seguimiento de los datos de referencia de Google Play para la instalación de la aplicación Android B
  • Android: Cómo comprobar si el número SMS entrante existe en el teléfono de contacto en BroadcastReceiver y el bloque es el número no existe
  • ¿Es mejor práctica de código para registrar un receptor en manifiesto o en código?
  • ¿Cómo recibir sms en android?
  • Android: Cómo detectar la transmisión "Activar el almacenamiento USB"?
  • ¿Puedo seguir recibiendo la intención del receptor de difusión después de que la fuerza detuviera mi aplicación en android?
  • Haga clic en la notificación GCM para no abrir la actividad deseada en Android Kitkat
  • QueryBroadcastReceivers no encuentra los receptores registrados con registerReceiver
  • La notificación deleteIntent no funciona
  • No se puede detectar cuando se responde la llamada saliente en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.