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:
- ¿Le falta una llamada para anular el registroReceiver ()? En android
- Cómo actualizar la interfaz de usuario en un BroadcastReceiver
- BroadcastReceiver onReceive activado cuando se registra
- BroadcastReceiver para Ethernet (RJ45) y USB en Android TV
- Haga clic en la notificación GCM para no abrir la actividad deseada en Android Kitkat
<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.
- BroadcastReceiver: set android: proceso de forma programática
- No se puede encontrar todos los dispositivos bluetooth android
- Cómo usar LocalBroadcastManager?
- ¿Es posible escribir un receptor de difusión Android que detecte cuando el teléfono se despierta?
- android.hardware.action.NEW_PICTURE se dispara dos veces
- Más de un BroadcastReceiver para la misma intención con doc contradictorio y práctica
- Prioridad en un receptor de difusión para recibir llamadas
- Android: receptor de la difusión para la pantalla encendido y pantalla apagado
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