Detectando la llamada saliente y el evento de hangup de llamada en android
Tengo un requisito en el que quiero detectar dos tipos de eventos relacionados con las llamadas en Android
- Siempre que una llamada saliente se hace, mi aplicación debe llegar a saber esto junto con el número llamado
- Cuando la llamada es colgada (debido al éxito / falla), mi aplicación debe llegar a conocer esto junto con la razón de hangup
¿Es esto posible en Android? Soy nuevo en la plataforma Android, por lo tanto, necesitará algunos buenos tutoriales detallados para guiarme a través de este
- Android: ¿cómo puedo iniciar una llamada telefónica en mi actividad y luego volver a ella?
- Cómo recuperar el estado de desvío de llamadas en código de througn de Android?
- Rechazo de la llamada entrante en android
- Llamar aResumo en la actividad de Android
- Ocultar tono dtmf al marcar
Gracias
- Servidor JSCallback cerrado: detener devoluciones de llamada
- Bloquear llamadas entrantes y sms en android
- Android: IntentService: cómo: pasar la devolución de llamada en IntentService de la actividad?
- Android cómo obtener el número de emergencia para llamar
- ContentResolver.insert devuelve null
- Barra de notificación de Android abrir última actividad activa?
- Trigger touch callout en iOS / android
- ¿Cómo reproducir archivos de audio cuando se inicia la llamada?
Debe crear un BroadcastReceiver:
public class CallReciever extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals( TelephonyManager.EXTRA_STATE_RINGING)) { // Phone number String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); // Ringing state // This code will execute when the phone has an incoming call } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals( TelephonyManager.EXTRA_STATE_IDLE) || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals( TelephonyManager.EXTRA_STATE_OFFHOOK)) { // This code will execute when the call is answered or disconnected } } }
Usted debe registrar su aplicación para escuchar estas intenciones en el manifiesto:
<receiver android:name=".CallReciever" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver>
Hay una solución más simple que utiliza sólo TelephonyManager y PhoneStateListener.You ni siquiera tiene que registrar un BroadcastReceiver.
public class MyPhoneStateListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { //Hangup case TelephonyManager.CALL_STATE_IDLE: break; //Outgoing case TelephonyManager.CALL_STATE_OFFHOOK: break; //Incoming case TelephonyManager.CALL_STATE_RINGING: break; } } }
Y para registrarlo:
public static void registerListener(Context context) { ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); }
Necesita crear un receptor para las siguientes acciones de intención:
- Llamada saliente – ACTION_NEW_OUTGOING_CALL
- Interrupción de llamada – ACTION_PHONE_STATE_CHANGED
- ¿Cómo ver qué archivos no se han guardado en Android Studio?
- Iniciar un fragmento a través de Intent dentro de un fragmento