Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Как заменить экран входящих вызовов на Android?

Дано: есть приложение Ultimate Call Screen HD - аналогичных приложений на маркете довольно много.
Вопрос: как это работает? Как написано?
У кого какие идеи?
P.S. Ориентируемся на нерутованные аппараты.


Ответ

TL;DR Приложение представляется системе гарнитурой для того, чтобы принимать/завершать звонки
У приложения Ultimate Call Screen HD в манифесте указано следущее:
...
Из манифеста видно, что PhoneReceiver получает первым интенты от системы про исходящий/входящий звонок. Далее он делегирует обработку сервисам InCallService и OutcallService, которые отображают необходимый интерфейс для управления и используют AudioManager для передачи голоса
UPDATE: Откроем класс InCallService
public class InCallService extends Service implements SensorEventListener, a, b, e { ... static boolean H; WindowManager G; WindowManager.LayoutParams I; CallWindowView J; ... private void e(final boolean b) { if (b) { return; } this.G.addView((View)this.J, (ViewGroup$LayoutParams)this.I); InCallService.H = true; }
private void f(final boolean b) { if (!b) { return; } if (this.J.getWindowToken() != null) { this.G.removeView((View)this.J); } InCallService.H = false; }
private void t() { this.I = new WindowManager.LayoutParams(-1, -1, 2010, 2621600, -1); if (g.a("hide_status_bar", true)) { final WindowManager.LayoutParams i = this.I; i.flags |= 0x100; } else { this.I.type = 2003; } this.I.gravity = 80; if (g.a("force_full_brightness", true)) { this.I.screenBrightness = 1.0f; } (this.J = (CallWindowView)((LayoutInflater)this.getSystemService("layout_inflater")).inflate(2130903099, (ViewGroup)null)).a(new a(this)); this.G = (WindowManager)this.getSystemService("window"); } ... }
Из этого кода видно, что приложение накрывает стандартное окно звонилки своим CallWindowView (для этого и необходимо разрешение android.permission.SYSTEM_ALERT_WINDOW). Разметка для входящего звонка хранится в R.layout.two_button_frame = 2130903099
... ...

Комментариев нет:

Отправить комментарий