Как да бъдете уведомени, когато фиксирането на екрана е изключено в Android 5.0 Lollipop?

Имам приложение, което работи във фонов режим и започва дейност, когато се случи определено събитие на телефона. Откривам с Android 5.0, че когато потребителят е включил фиксирането на екрана с друго приложение, извикването startActivity(intent) се игнорира напълно. Приложението ми не знае, че дейността не е започнала, така че потребителят няма да има друг шанс да види дейността, докато не отвори отново ръчно приложението ми.

Има ли някакво събитие, за което мога да се регистрирам, за да бъда уведомен, когато фиксирането на екрана е изключено, за да мога да опитам отново да започна дейността си?


person jokeefe    schedule 11.11.2014    source източник
comment
Вместо да стартирате дейност, може да обмислите преминаване към използване на цял екран PendingIntent на Notification. Преди 5.0, това ще започне дейността, посочена в PendingIntent. На 5.0+ това ще доведе до хедс-ъп Notification. Все още не съм играл с фиксиране, но се надявам хедс-ъп Notification все пак да се появи или поне да завърши като обикновен Notification.   -  person CommonsWare    schedule 11.11.2014
comment
@CommonsWare Не съм експериментирал с известия, но една от първоначално описаните функции (назад, когато фиксирането на екрана беше обявено като заключване на задачи) беше, че известията от други приложения няма да се показват.   -  person Kevin Krumwiede    schedule 20.04.2015


Отговори (2)


Ето метод в клас ActivityManager, който казва състоянието на текущата задача дали е заключена или не в случай на фиксиране на екрана:

!mActivityManager.isInLockTaskMode()

За повече подробности вижте тази връзка: http://developer.android.com/reference/android/app/ActivityManager.html#isInLockTaskMode%28%29

person Vikasdeep Singh    schedule 20.04.2015
comment
OP: Можете да използвате това, за да забавите известието, докато не може да бъде показано. - person Kevin Krumwiede; 20.04.2015

Вашето приложение трябва да е администратор на устройство (с администраторски права, предоставени от потребителя). След като направите това, можете да приложите това обратно извикване:

AdminReceiver.onLockTaskModeExiting(Context context, Intent intent)

за да направите нещо, когато режимът на фиксиране е спрян.

За да видите как да направите приложението си приложение за администратор: можете да проверите един от предишните ми отговори тук

person ben75    schedule 11.11.2014
comment
Благодаря ти! Точно това търсех. Моето приложение всъщност вече е настроено като администратор на устройство. Не получавам обаче задействане на събитие за това. Моят AdminReceiver клас има BIND_DEVICE_ADMIN разрешение и DEVICE_ADMIN_ENABLED intent-filter в AndroidManifest.xml. Хващам други събития в неговия onReceive() метод (като промени на паролата), но събитието android.app.action.LOCK_TASK_EXITING не се задейства. Знаете ли дали има някаква друга настройка, необходима за това? - person jokeefe; 12.11.2014
comment
Написах пълна статия, обясняваща фиксирането на екрана, налична на florent-dupont.blogspot.fr/2015/02/. Изходният код също е наличен, така че можете да го използвате, за да ви помогне да получавате известия за събития за фиксиране/откачване. - person Florent Dupont; 09.02.2015
comment
Това наистина ли е за приложенията на администратора на устройството или само за приложението на собственика на устройството? - person Kevin Krumwiede; 20.04.2015