Как получить уведомление, когда закрепление экрана отключено в 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
ОП: Вы можете использовать это, чтобы отложить уведомление до тех пор, пока оно не будет показано. - 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 в 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