Interceptar llamadas con BroadCast Receiver

Broadcast es una clase de android que se ejecuta en segundo plano siempre, esta clase lee todo lo entrante y saliente del teléfono (interceptar llamadas), es decir no solo son llamadas, también lee los mensajes, conexión a internet y un largo etc.

una de las aplicaciones más comunes es como la siguiente:

interceptar llamadas

Call out Express o bloqueador de llamadas express  es un app para bloquear esas llamadas molestas pero tenemos la idea de que sea más que un bloqueador de llamadas (si pueden descargarlo seria de ayuda), pero en otro post abordaremos más.

Permisos en manifest

los permisos que debemos usar para interceptar llamadas son siguientes:

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

y cuando creen la actividad de broadcast receiver les debe aparecer algo así dentro de las etiquetas application:

<receiver
    android:name=".InterceptorCall"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
    </intent-filter>
</receiver>

 

Creando la clase broadcast

vamos a ir a nuestro proyecto y vamos a tocar dar click derecho y vamos a colocarlo hasta donde nos muestra la siguiente imagen (new > other > Broadcast Receiver) :

 

Interceptar una llamada y saber que número nos marca

para esto necesitamos centrarse en el método onReceive, vamos a evaluar que nuestro intent no este vacío, cada vez que entra al método del broadcast android nos envía un intent con información detallada.

 

Bundle extras = intent.getExtras();
if(extras != null){}

y vamos a evaluar que el estado sea el correcto, en este caso quiero saber si están llamado

if ( extras.getString("state").equals(TelephonyManager.EXTRA_STATE_RINGING)) {
//codigo
}

en la documentación de android TelephonyManager tiene 3 estados para las llamadas:

  • CALL_STATE_IDLE : estado inactivo
  • CALL_STATE_OFFHOOK: contesto llamada
  • CALL_STATE_RINGING: llamando

Aquí podemos echar andar la imaginación, y para terminar cómo obtener el número entrante de la llamada se hace de la siguiente manera:

String phoneNumber = extras.getString("incoming_number");

de esta manera podemos interceptar llamadas y hacer alguna acción en nuestra app ya sea en llamadas entrantes, llamadas contestadas, o llamadas terminadas.

por Cesar Flores

Programador de tiempo completo, Gamer de medio tiempo y fotógrafo ocasionalmente, me gusta el front-end y mi framework favorito es angular aunque no por eso le hago el feo a un nuevo lenguaje.

2 comentario en “Interceptar llamadas en Android”
    1. Hola germam, si aun funciona en android 9 , solo que partir de Android 9 (nivel API 28), la NETWORK_STATE_CHANGED_ACTION no recibe información sobre la ubicación del usuario o los datos de identificación personal.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.