Фон
Я изучаю, как заменить пользовательский интерфейс номеронабирателя, когда пользователь получает телефонный звонок (входящие / исходящие телефонные звонки).
Это возможно двумя способами:
В старых версиях 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 он поддерживается?
Если это невозможно, почему встроенное приложение знает, как это проверить?