¿Cómo hacer o recibir una llamada desde la consola?
Esperando algo como esto, estilo UNIX:
make_call +3750291234567 < played_data.wav > recorded_data.wav
wait_for_call < played_data.wav > recorded_data.wav 2> call_info.txt
Preferiblemente, esto no debería tener efectos secundarios como los sonidos del dispositivo. El teléfono es Xperia X10 (para el cual se informa que la grabación de llamadas funciona).
Quiero que las llamadas sean programables como otras cosas de Linux a las que me he acostumbrado.
No podrá lograr esto usando solo herramientas de usuario, como las que describe, al menos no mientras se ejecuta Android.
El motivo es que RIL abre el dispositivo de radio (generalmente algún nodo de dispositivo bajo /dev/*
) como un servicio de Linux de bajo nivel, y aunque tiene un bloqueo exclusivo en el dispositivo, nada más puede leer o escribir en la radio. El RIL luego se comunica con la plataforma Android para todos los eventos relacionados con la radio.
Se podría hacer con algunas modificaciones extensas al núcleo subyacente de Linux (es de código abierto, por lo que definitivamente es una posibilidad si no le importa ensuciarse las manos en C), o reemplazando el demonio RIL (no tan fácil, porque rild
es no se requiere que sea de código abierto, por lo tanto, no sabe cuál es la implementación subyacente sin ingeniería inversa). Hacer esto último romperá la capacidad de Android para usarlo correctamente, a menos que de alguna manera encuentre un canal de compatibilidad para la comunicación de proxy entre el nuevo RIL y el RIL existente, e incluso entonces, existe una buena posibilidad de que Android se confunda cuando intente hacer una llamada (sabiendo que el módem no debeactualmente en uso, pero obteniendo una respuesta de la radio diciendo que está en uso).
De lo contrario, es posible que también pueda lograrlo reemplazando la aplicación Teléfono y utilizando API de plataforma totalmente nativas. Pero estoy pensando que no funcionará (al menos según mi conocimiento de cómo funcionan las radios HTC). En un dispositivo HTC, cuando realiza una llamada, Android notifica a rild
, que realiza la llamada, y luego rild
le dice a la radio que debe enrutar todo el audio de la llamada a través del altavoz del teléfono y enrutar todo el sonido captado por el micrófono a la llamada telefónica. La plataforma Android no maneja el enrutamiento de audio de llamadas por sí misma.
Todo lo anterior requiere rootear el dispositivo e instalar una ROM personalizada como mínimo.
Debería poder hacer llamadas telefónicas fácilmente en la línea de comando, suponiendo que tenga la raíz.
El comando es service call phone 2 s16 "+18001231234"
. Esto automáticamente comenzará a llamar a ese número de teléfono.
Sin embargo, todo esto se hace en primer plano. Si tuviera el teléfono, vería aparecer las pantallas de llamadas normales. Si estuviera tratando de iniciar una llamada telefónica detrás de escena sin que el usuario lo sepa, no estoy seguro de cómo lo haría.
Además, esto es solo para enviar llamadas, no para recibir. Y no puede canalizar un archivo de sonido a la llamada en lugar de usar el micrófono real, ni puede grabar el sonido entrante.
Más información: Android – Llamar/Marcar desde la línea de comandos de adb shell
José