¿Cómo llamar desde la consola?

¿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.

Es una excelente pregunta, pero realmente creo (según mi respuesta a continuación) que este no es el mejor lugar para preguntar, ya que android.stackexchange.com es más para preguntas orientadas al usuario, y esta pregunta es definitivamente un "desarrollador" incondicional. pregunta. Es mejor que preguntes en stackoverflow.com, o incluso en sitios como XDA .

Respuestas (2)

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 rildes 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 rildle 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.

¿Hay aplicaciones preparadas para permitir al menos algo parcial, por ejemplo, hacer o esperar una llamada sin redirección de sonido?

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

Simplemente iniciar una llamada ya es mejor que nada. La siguiente pregunta es esperar llamada y aceptarla/rechazarla.
¿Dónde encontrar una descripción completa de qué hacer con "llamada de servicio <lo que sea>"? Solo pruebo y erro "llamada de servicio wifi 3 s32 0" para deshabilitar Wi-Fi (pero no volver a habilitarlo).