2017-01-20 14 views
9

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

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

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

Как вы на самом деле разработать 3-участник InCallService?

А именно:

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

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

+0

На ваш вопрос # 1, работает ли 'android.intent.action.PHONE_STATE' трансляция? –

+0

@SharpEdge вы получаете уведомление о «вызове», но вы не знаете, какой android.telecom.Call - https://developer.android.com/reference/android/telecom/Call.html. С таким экземпляром я мог бы на самом деле просто вызовите # ответ (int videoState) и получите 2. отсортированный – leRobot

+0

Там, похоже, не так много информации - комментарии в этом вопросе могут помочь: http://stackoverflow.com/q/34861910/334402 , Одно замечание на всякий случай неясно - этот API должен заменить InCallUI - то есть пользовательский интерфейс для управления вызовами. – Mick

ответ

2

Следуйте рекомендациям второго комментария Replacing in call app. Кроме того, вам нужна служба, которая реализует интерфейс 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(). Я предлагаю, чтобы, когда вы загружаете материал выше работы, запустите несколько тестовых вызовов, чтобы узнать, когда вызываются разные обратные вызовы.

Что касается учебников, я не мог найти, когда я смотрел на это, но это было больше года назад ...

Надеется, что это помогает!

+0

nice, попробует сегодня выполнить тестовую реализацию и вернется с результатами. – leRobot

+0

Привет, IeRobot, вы пробовали InCallService, в моем случае служба не вызывается для входящих и исходящих вызовов. – rajahsekar

4

Я думаю, Google, должно быть, прочитал этот вопрос, потому что, по-видимому, на Android 8 появилось новое разрешение allows answering calls through a 3rd party dev-facing permission.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^