У меня есть полноэкранная иммерсивная активность, которая должна оставаться в полноэкранном режиме до тех пор, пока пользователь явно не выйдет. (Например, подумайте о чем-то вроде просмотра видео на Youtube в полноэкранном режиме).
Однако недавно я заметил, что запуск многих нежелательных действий может нарушить поведение моего приложения. Например, многие сомнительные «бесплатные приложения», как правило, генерируют полноэкранные прозрачные действия и показывают рекламу, немедленно отвлекая пользователя. Всплывающие окна уведомлений «Полноэкранный режим» от определенных приложений, которые на самом деле являются полноэкранными действиями, также мгновенно прерывают мою деятельность.
Есть ли способ избежать кражи фокуса этими действиями или способ удержать их за моей полноэкранной активностью, чтобы они не нарушали мой полноэкранный режим? Другими словами, как мне всегда поддерживать свою активность наверху всякий раз, когда какое-то мошенническое приложение решает запустить активность поверх моей?
Их не нужно отменять, а нужно «отложить на время», пока пользователь не выйдет из полноэкранного режима.
Метод, который приходит на ум, состоит в том, чтобы перезапустить мою активность с FLAG_ACTIVITY_REORDER_TO_FRONT
в тот момент, когда она теряет фокус, но это не будет выглядеть красиво для пользователя :(
Примечание. Если вы хотите попробовать это сами, я нашел приложение, которое «симулирует» запуск этих мошеннических действий. Загрузите это - https://play.google.com/store/apps/details?id=com.nlucas.popupnotificationslite&hl=en
Всякий раз, когда вы получаете уведомления, он запускает полноэкранную прозрачную активность. Попробуйте посмотреть видео на Youtube и получить от кого-то 10 уведомлений, и представьте, как это будет отвлекать.
ОБНОВЛЕНИЕ: кажется, что это не работает:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!hasFocus) {
Intent i = new Intent(getBaseContext(), MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
startActivity(i);
}
if(! hasFocus && !mDialogList.isShowing()){...
- person Udi Reshef   schedule 02.08.2016