Как определить, какое приложение вызывает ошибку "Обнаружен наложение экрана"?

Позвольте мне предвосхитить это с тем, что я уже прочитал сообщение Android "Обнаружено наложение экрана", если пользователь пытается предоставить разрешение при отображении уведомления, и я точно понимаю, в чем заключается проблема с наложением.

Я также понимаю, как запросить его, а также как проверить, имеет ли мое текущее работающее приложение разрешение на рисование наложений (!Settings.canDrawOverlays(this)).

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

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

введите описание изображения здесь

Проблема в том, что это не мое приложение! Это AZ Screen Recorder ( ссылка), который работает как наложение, но из-за того, что они присутствуют в моем приложении во время появления этого всплывающего окна, я виноват в этой проблеме.

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

Я могу проверить, могут ли они рисовать оверлеи в моем приложении, но я не знаю, как проверить других.

Поэтому мой вопрос заключается в том, существует ли способ программно проверить, есть ли в настоящее время какие-либо приложения, которые выполняют наложение во время выполнения, и если да, могу ли я узнать имя пакета указанных приложений?

(PS, у меня нет проблем с приложением для записи экрана, я просто хотел дать ссылку на него, чтобы каждый мог загрузить и протестировать, если захочет)

0 ответов

Если вы можете создать тестовое представление и сгенерировать для него событие касания, то для версий нуги и oreo вы можете использовать:

view.setOnTouchListener((v, event) -> {
        if ((event.getFlags() & 0x2) != 0) {
            mPresenter.onVideoViewTapped();
            return false;
        }
        return false;
    });

Здесь 0x2 - это значение FLAG_WINDOW_IS_PARTIALLY_OBSCURED, которое скрыто согласно документации.

Другие вопросы по тегам