Ответ на входящий вызов с использованием android.telecom и InCallService

Начиная с API 21, Google добавляет функции в android.telecom в целом, особенно благодаря внедрению большего числа членов TelecomManager и добавлению InCallService . Этот последний, как предполагается, позволяет несистемным, сторонним приложениям предоставлять и заменять функциональные возможности экрана вызова «Призываемые приложения» – окно, которое всплывает, и разрешает действие в EXTRA_STATE_OFFHOOK или EXTRA_STATE_RINGING (т. EXTRA_STATE_OFFHOOK EXTRA_STATE_RINGING и исходящих телефонные звонки).

В настоящее время только этот экран имеет полный контроль над звонками и активными вызовами и связанными с ними системными обратными вызовами с мелкозернистой информацией с помощью ограниченного MODIFY_PHONE_STATE разрешения MODIFY_PHONE_STATE и большого количества защищенного кода AOSP, даже недоступного для отражения. Это, в частности, один из самых измененных фрагментов кода в разных версиях ROM производителей, вместе с пусковой установкой, контактами и камерой.

Это все очень красиво, но …

Как вы на самом деле разрабатываете сторонний InCallService?

А именно:

  1. Как вы получаете уведомление и получаете экземпляры GSM-звонков
  2. Как отвечать на эти вызовы?
  3. Каков жизненный цикл обратных вызовов в этом классе
  4. Предоставляет ли Google какой-либо фактический учебник для этого, которого я не нашел?

Я не буду сразу отвечать за все эти вопросы, но любой ответ, вероятно, ассоциируется с другими вопросами. Это широко, но по своей сути это должно быть: в Интернете нет примера, который я наткнулся на AOSP-код, и этот код основан на предположении привилегий root, что делает его непригодным для разработки сторонних приложений цели.

Думаю, Google должен прочитать этот вопрос, потому что, по-видимому, на Android 8 новое разрешение позволяет отвечать на вызовы через стороннее разрешение, обращенное к экрану .

android.permission. ANSWER_PHONE_CALLS (…) позволяет приложениям автоматически отвечать на входящие телефонные звонки

Пока нет деталей, поскольку документация по API 26 еще не выпущена. Я обязательно уточню этот ответ, когда они это сделают.

Следуйте рекомендациям второго комментария приложения « Замена в вызове» . Кроме того, вам нужна служба, которая реализует интерфейс InCallService. Когда поступит вызов, будет вызван метод onCallAdded (Call call), который даст вам ссылку на объект вызова.

 <service android:name=".InCallServiceImplementation" android:enabled="true" android:exported="true" android:permission="android.permission.BIND_INCALL_SERVICE"> <meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" /> <intent-filter> <action android:name="android.telecom.InCallService" /> </intent-filter> </service> 

Когда у вас есть объект вызова, ответ на него прост, как call.answer (). Я предлагаю, чтобы, когда вы загружаете материал выше, запустите несколько тестовых вызовов, чтобы узнать, когда вызываются разные обратные вызовы.

Что касается учебников, я не мог найти их, когда я изучал это, но это было более года назад …

Надеюсь это поможет!

Intereting Posts
Найдите Bluetooth Inbox Ошибка PhoneGap – «Неподготовлено ReferenceError: cordova не определено» SDK Google Analytics: отслеживание имени моей версии приложения и модели устройства Android Ethernet и Wi-Fi одновременно Элемент сетки не загорается при нажатии Android VideoView Невозможно воспроизвести видеообнаружение, особенно .mp4 Ошибка PhoneTapansfer.upload () метаданных Phonegap () для Android 3 на Android Что такое дифференциал скорости двоичного файла в сравнении с текстовым файлом? Рабочее пространство здания с приложением android занимает слишком много времени Wearable not installation app (критерии функциональности Android Wear) Gmail подписывается на интеграцию в приложение для Android, profilePhoto всегда null? Не удалось установить сервисы Google Play: загрузка прервана Лучший способ для локального HTML-файла связываться с (read / write) локальным файлом Excel .xlsm Excel Слушать Услуги и AdMob: Ожидаемые 4132500, но найдено 4242000 Android: layout_marginBottom, похоже, не работает должным образом в 2.2 (Froyo)