Имам поглъщаща дейност на цял екран, която трябва да остане на цял екран, докато потребителят изрично излезе. (Например, помислете за нещо като гледане на видеоклип в 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