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:
- Android BootReceiver no funciona
- Registrar programáticamente un receptor de difusión
- BroadcastReceiver en android.net.conn.CONNECTIVITY_CHANGE llamado varias veces
- ¿Cómo se puede detectar el lanzamiento de una aplicación de Android?
- Los componentes Broadcastreceiver no pueden enlazar servicios en android
<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.
- Informar la actividad de un BroadcastReceiver SÓLO si está en primer plano
- ¿Es esto posible comprobar si una difusión fue enviada en modo pegajoso? ¿Puede ser abortado / removido?
- Android BroadcastReceiver onReceive () llamado dos veces en android 4.0
- Android: ¿Cómo puedo abortar / eliminar completamente la emisión pegajosa?
- ¿Por qué llamar a setResult en BroadcastReceiver?
- Iniciar la aplicación sin actividad, mi receptor de difusión no funciona
- Mantener el receptor de difusión funcionando después de cerrar la aplicación
- Android abortBroadcast no impide que los sms sean transmitidos
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 }
- Cómo eliminar fácilmente los recursos de localización innecesarios de bibliotecas añadidas en la versión APK
- Cómo descargar el archivo de la unidad de google en android