Начиная с API 21, Google добавляет функции android.telecom в целом, особенно путем внедрения большего числа членов TelecomManager и добавление InCallService. Этот последний, как предполагается, позволяет несистемным, сторонним приложениям предоставлять и заменять функциональные возможности экрана вызова вызовов Calls при вызове - окно, которое всплывает, и разрешает действие в передачах EXTRA_STATE_OFFHOOK
или EXTRA_STATE_RINGING
(например, т.е. входящие и исходящие телефонные звонки).
В настоящее время только этот экран имеет полный контроль над вызовами и активными вызовами и связанными с ними системными обратными вызовами с мелкозернистой информацией с помощью ограниченного корнем разрешения MODIFY_PHONE_STATE
и большого количества защищенного кода AOSP, даже недоступного для отражения. Это, в частности, один из самых измененных фрагментов кода в разных версиях ROM производителей, вместе с пусковой установкой, контактами и камерой.
Это все очень красиво, но...
Как вы на самом деле разрабатываете сторонний InCallService?
А именно:
- Как вы получаете уведомление и получаете экземпляры GSM-звонков
- Как отвечать на эти вызовы
- Каков жизненный цикл обратных вызовов в этом классе
- Предоставляет ли Google какой-либо фактический учебник для этого, который я не нашел.
Я не буду задавать ответы на все эти вопросы сразу, но любой ответ, вероятно, ассоциируется с другими вопросами. Это широко, но по своей сути это должно быть: в Интернете нет примера, который я наткнулся на AOSP-код, и этот код основан на предположении о привилегиях root, что делает его непригодным для разработки сторонних приложений целей.