1 votos

¿Cómo puede un shell script obtener el número de una llamada entrante/saliente?

¡nuevo usuario aquí desde Montreal, Canadá!

Así que tengo un shell script que se ejecuta cuando entra una llamada, y otro que se ejecuta cuando hago una llamada. ¿Cómo puede este script obtener el número de teléfono de la persona que llama / del número al que se llama? Si se revisa la salida del logcat no se ve.

0 votos

¿Cómo se ejecuta el shell script? MacroDroid puede darte el número tanto para las llamadas entrantes como para las salientes. Puedes usar esa aplicación con Secure Settings para pasar el número directamente a tu shell script o dejar que escriba un archivo y leer el archivo desde tu shell script. // Hazme saber si esto es suficiente como respuesta para ti.

0 votos

¿Qué versión de Android y qué dispositivo utilizas? ¿Está rooteado?

0 votos

Muchas gracias por tu respuesta Firelord. Yo (actualmente) uso Tasker para ejecutar este script. Funciona con MacroDroid volcando la información a un archivo de registro, y luego recuperándola de mi script, pero me gustaría que hubiera una manera menos torpe de hacerlo. Podría usar MacroDroid directamente si tuviera la capacidad de ejecutar comandos shell arbitrarios, aunque no he encontrado cómo hacerlo :/

0voto

Firelord Puntos 161

Recepción del número de la llamada entrante

Tasker mantiene un variable global denominado Número de llamada ( %CNUM ) que reflejaría el número de la llamada entrante.

Si pretende ejecutar su script cuando el dispositivo suene, puede configurar el siguiente perfil:

  • Perfil: Evento → Teléfono → Timbre de teléfono → Prioridad: Máxima
  • Tarea: (Acciones): Código → Ejecutar Shell → Comando: sh FILE_PATH "%CNUM"

    Sustituir FILE_PATH con la ruta absoluta del archivo de su script. En su script, %CNUM puede recibirse como argumento almacenando $1 en una variable. (Véase esta respuesta de Bruce Ediger para cualquier ayuda relacionada).

    Ejemplo script:

    #!/system/bin/sh
    incoming_no="$1"
    echo "$incoming_no" >> /sdcard/incoming_no.txt

    Guarda el script y prueba a ejecutarlo desde una acción de ese perfil. Para una llamada entrante, crearía o anexaría el archivo incoming_no.txt con el número de la persona que llama.

Nota: Tasker admite la creación de variables globales, así que si no tienes intención de ejecutar tu script con ese perfil, utiliza la acción Variable → Establecer variable para almacenar el valor de %CNUM en una variable global específica del usuario. Cuando llegue el momento, utilice esa variable en su script de Tasker.

Recepción del número llamado desde la llamada saliente

Tasker no tiene un soporte incorporado para esto, según me parece. No te preocupes, ya que esta respuesta por sush se puede utilizar en Tasker para nuestro objetivo. El quid de esta respuesta es: escuchar una emisión con acción android.intent.action.NEW_OUTGOING_CALL y recibir el valor de una clave de tipo extra particular.

Tasker tiene soporte para la recepción de los intentos. Antes de empezar con el perfil, escúchame cómo he extraído el valor.

Hice una llamada a un número e inmediatamente ejecuté el siguiente comando (requiere adb en PC):

adb shell dumpsys activity

En la salida, en la sección ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts) Me he dado cuenta:

BroadcastRecord{32699300 u0 **android.intent.action.NEW\_OUTGOING\_CALL**}
act=android.intent.action.NEW\_OUTGOING\_CALL flg=0x10000030 (has extras)
extras: Bundle\[{**android.intent.extra.PHONE\_NUMBER**\=+919XXXXYYYZZ}\]

Aquí, android.intent.extra.PHONE_NUMBER es la clave de tipo extra.

En cuanto a Tasker, configure su perfil de la siguiente manera:

  • Perfil: Evento → Sistema → Intención recibida:

    • Acción: android.intent.action.NEW_OUTGOING_CALL
    • Prioridad: Máxima
  • Tarea: (Acciones): el número puede ser recuperado de la variable

    %android_intent_extra_phone_number 

    Como de costumbre, almacene el valor de esa variable en una variable global específica del usuario utilizando Variable → Conjunto de variables y utilice esta última en su script siempre que lo desee.

Nota :

  • La solución está probada en Android 4.2.1 y Android 5.0.2 (COS12).
  • Por guía del usuario de Tasker, la pestaña Variables no se muestra si el Menú / Prefs / UI / Modo principiante está activado.
  • El número de llamada para las llamadas entrantes puede recuperarse alternativamente escuchando la intención de emisión con la acción android.intent.action.PHONE_STATE y recibir el número de %incoming_number . Utilice %state en una condición para comprobar si su valor es RINGING o IDLE. En caso de ser el primero, obtener el valor de %incoming_number .

0 votos

Vaya, muchas gracias Firelord por la respuesta tan detallada y completa.

0 votos

En un tema similar, ¿hay alguna manera de que mi script sepa si el teléfono está sonando, o conectado a una llamada?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X