Как сделать или принять вызов с консоли?
Ожидается что-то вроде этого в стиле UNIX:
make_call +3750291234567 < played_data.wav > recorded_data.wav
wait_for_call < played_data.wav > recorded_data.wav 2> call_info.txt
Желательно, чтобы это не имело побочных эффектов, таких как звуки устройства. Телефон Xperia X10 (для которого запись разговоров, как сообщается, работает).
Я хочу, чтобы вызовы можно было использовать в сценариях, как и другие вещи Linux, к которым я привык.
Вы не сможете добиться этого, используя только пользовательские инструменты, подобные тому, что вы описываете, - по крайней мере, не во время работы Android.
Причина в том, что RIL открывает радиоустройство (как правило, какой-либо узел устройства в разделе /dev/*
) как низкоуровневую службу Linux, и хотя оно имеет эксклюзивную блокировку устройства, ничто другое не может читать или записывать на радио. Затем RIL связывается с платформой Android обо всех событиях, связанных с радио.
Это можно сделать с помощью некоторых обширных модификаций базового ядра Linux (это с открытым исходным кодом, поэтому, безусловно, возможно, если вы не против замарать руки в C) или путем замены демона RIL (не так просто, потому rild
что не обязательно иметь открытый исходный код, поэтому вы не знаете, что такое базовая реализация без обратного проектирования). Выполнение последнего нарушит способность Android использовать его должным образом, если только вы каким-то образом не придумаете канал совместимости для прокси-связи между новым RIL и существующим RIL — и даже в этом случае есть хороший шанс, что Android запутается, когда попытается позвонить (зная, что модем не долженв настоящее время используется, но получает ответ от радиостанции о том, что оно используется).
В противном случае вы также можете добиться этого, заменив приложение «Телефон» и используя полностью нативные API-интерфейсы платформы. Но я думаю, что это не сработает (по крайней мере, исходя из моих знаний о том, как работают радиостанции HTC). В устройстве HTC, когда вы совершаете вызов, Android уведомляет rild
, который выполняет вызов, а затем rild
сообщает радиостанции , что она должна направлять весь звук вызова через динамик телефона и направлять весь звук, улавливаемый микрофоном, в телефонный вызов. Платформа Android сама по себе не обрабатывает аудио маршрутизацию вызовов.
Все вышеперечисленное требует как минимум рутирования устройства и установки специально созданного ПЗУ.
Вы должны иметь возможность легко совершать телефонные звонки в командной строке, если у вас есть root.
Команда есть service call phone 2 s16 "+18001231234"
. Это автоматически начнет звонить на этот номер телефона.
Однако все это делается на переднем плане. Если бы у вас был телефон, вы бы увидели обычные экраны вызовов. Если бы вы пытались запустить телефонный звонок за кулисами без ведома пользователя, я не уверен, как бы вы это сделали.
Кроме того, это только для отправки звонков, а не для приема. И вы не можете направить звуковой файл на звонок вместо использования реального микрофона, а также не можете записать входящий звук.
Дополнительная информация: Android — вызов/набор номера из командной строки оболочки adb.
Джо