Как звонить из консоли?

Как сделать или принять вызов с консоли?

Ожидается что-то вроде этого в стиле 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.stackexchange.com больше предназначен для вопросов, ориентированных на пользователя, и этот вопрос определенно является хардкорным «разработчиком». вопрос. Вам лучше спросить на stackoverflow.com или, может быть, даже на таких сайтах, как XDA .

Ответы (2)

Вы не сможете добиться этого, используя только пользовательские инструменты, подобные тому, что вы описываете, - по крайней мере, не во время работы 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.

Просто инициировать звонок уже лучше, чем ничего. Следующий вопрос - ожидание звонка и его принятие/отклонение.
Где найти полное описание того, что делать с «вызовом службы <что угодно>»? Я только методом проб и ошибок «вызов службы Wi-Fi 3 s32 0», чтобы отключить Wi-Fi (но не включить его повторно).