Как экранные наложения обнаруживают (и отключают себя), когда запрашивается разрешение во время выполнения?

Если приложение запрашивает, чтобы пользователь предоставил разрешение во время выполнения, когда наложение экрана активно, система выдает предупреждение о том, что было обнаружено наложение экрана. Затем пользователю необходимо вручную деактивировать наложение экрана, пока он не сможет предоставить разрешение. . Это отстой с точки зрения UX.

Однако недавно я видел, что некоторые приложения, в частности Facebook Messenger (Chat Heads), избегают этого, просто автоматически отключая наложение экрана при запросе разрешения и снова включив его после того, как оно было предоставлено (или нет).

Как они это делают и как я могу это воспроизвести?

Я не смог найти какие-либо обратные вызовы или трансляции, которые кажутся связанными с этим.


person Syzygy    schedule 09.06.2017    source источник


Ответы (1)


Похоже, это была просто проблема с конфигурацией, так как это работает автоматически с правильной конфигурацией.

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.RGBA_8888);

Раньше я использовал TYPE_SYSTEM_OVERLAY, но также экспериментировал с TYPE_SYSTEM_ALERT. Это дало мне некоторые проблемы, когда его нельзя было трогать и не «уклоняться» от запроса разрешения. Или было бы сенсорно, но мешает экранная клавиатура.

В этой конфигурации вид сенсорный, экранная клавиатура работает, а вид наложения скрывается и отображается автоматически при запросе разрешения, избегая появления ужасного сообщения об обнаружении наложения экрана.

person Syzygy    schedule 21.06.2017