Можно ли определить, является ли экран теперь иммерсивным или нет, даже если не на переднем плане? - PullRequest
0 голосов
/ 28 июня 2018

Фон

Я изучаю, как заменить пользовательский интерфейс номеронабирателя, когда пользователь получает телефонный звонок (входящие / исходящие телефонные звонки).

Это возможно двумя способами:

  • В старых версиях Android это возможно при наличии вида сверху, который вызывается PHONE_STATE_CHANGED и NEW_OUTGOING_CALL Intents.

  • В новых версиях Android (по крайней мере, API 23 - Android M-6.0) это можно сделать, расширив InCallService и предоставив Activity, которая будет открыта оттуда. , Я даже нашел пример, чтобы сделать это, здесь .

проблема

Посмотрим, как работает встроенная звонилка, если пользователь использует приложение в режиме в режиме погружения (игра или видео на YouTube в альбомной ориентации), и теперь устройство работает звонит (входящий звонок), вместо полноэкранного экрана появляется уведомление.

Но я не могу найти, как это сделать с помощью API.

Что я пробовал

Я пытался просмотреть все документы InCallService. Я также пытался выяснить, могу ли я различить иммерсивный и не иммерсивный, проверяя различные значения, которые я получаю из WindowManager:

    val wm = getSystemService(Service.WINDOW_SERVICE) as WindowManager
    val display = wm.defaultDisplay
    val metrics = DisplayMetrics()
    display.getMetrics(metrics)
    val realMetrics = DisplayMetrics()
    display.getRealMetrics(realMetrics)
    val realSize = Point()
    display.getRealSize(realSize)
    val size = Point()
    display.getSize(size)
    Log.d("AppLog", "mode:${display.mode} state:${display.state} size:$size realSize:$realSize metrics:$metrics realMetrics:$realMetrics rotation:${display.rotation}")

Полагаю, можно было бы проверить это с помощью службы специальных возможностей (но не знаю, как это сделать), но это кажется слишком большим для этого.

Вопрос

Возможно ли приложение проверить, находится ли экран в режиме погружения?

Если это возможно, то как и с какой версии Android он поддерживается?

Если это невозможно, почему встроенное приложение знает, как это проверить?

1 Ответ

0 голосов
/ 04 июля 2018

Вы должны опубликовать свой входящий звонок в качестве уведомления.

В конструкторе уведомлений используйте намерение «Ожидание», чтобы запустить полноэкранную версию интерфейса входящего вызова: builder.setContentIntent (pendingIntent); builder.setFullScreenIntent (pendingIntent, true);

Система будет отображать оповещения в случае каких-либо текущих действий (и это должно учитывать режим погружения). Если устройство пользователя выключено и на экране блокировки, полноэкранное намерение будет использоваться для запуска полноэкранного пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...