3

У меня есть приложение, которое работает в фоновом режиме и запускает действие, когда на телефоне происходит определенное событие. Я нахожусь с Android 5.0, когда пользователь имеет прикрепление экрана к другому приложению, вызов startActivity (намерение) полностью игнорируется. Мое приложение не знает, что активность не началась, поэтому у пользователя не будет другого шанса увидеть активность до тех пор, пока они вручную не откроют мое приложение.Как получать уведомления о отключении экрана в Android 5.0 Lollipop?

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

+1

Вместо того, чтобы начать деятельность, вы можете рассмотреть вопрос о переходе к использованию полного экрана 'PendingIntent' на' УВЕДОМЛЕНИЯ on'. Pre-5.0, это запустит действие, указанное в 'PendingIntent'. В 5.0+ это приведет к хедз-ап «Уведомление». Я еще не играл с фиксацией, но я надеюсь, что хедз-ап «Уведомление» все еще появляется или, по крайней мере, завершается как регулярное «Уведомление». – CommonsWare

+0

@CommonsWare Я не экспериментировал с уведомлениями, но одна из функций, описанных ранее (назад, когда привязка экрана была объявлена ​​как «блокировка задачи»), заключалась в том, что уведомления из других приложений отображались бы * not *. –

ответ

1

Ваше приложение должно быть администратором устройства (с правами администратора, предоставленными пользователем). После того, как вы сделали это, вы можете реализовать эту функцию обратного вызова:

AdminReceiver.onLockTaskModeExiting(Context context, Intent intent)

сделать что-то, когда режим пиннинга останавливается.

Чтобы узнать, как сделать ваше приложение приложение администратора: вы можете проверить один из моего предыдущего ответа here

+0

Спасибо! Это именно то, что я искал. На самом деле мое приложение уже настроено как администратор устройств. Однако я не получаю триггер события. Мой класс AdminReceiver имеет разрешение 'BIND_DEVICE_ADMIN' и фильтр намерения' DEVICE_ADMIN_ENABLED' в AndroidManifest.xml. Я занимаюсь другими событиями в методе 'onReceive()' (например, изменения пароля), но событие 'android.app.action.LOCK_TASK_EXITING' не запускается. Знаете ли вы, нужна ли какая-либо другая настройка для этого? – jokeefe

+2

Я написал полную статью, объясняющую привязку экрана, доступную по адресу http://florent-dupont.blogspot.fr/2015/02/android-5-screen-pinning.html. Исходный код также доступен, чтобы вы могли его использовать, чтобы получать уведомления о событиях pin/unpin. –

+0

Действительно ли это для приложений администратора устройства или только для приложения владельца устройства? –

1

Вот метод в классе ActivityManager который сообщает статус текущей задачи, если он заблокирован или нет в случае экрана пиннинга:

!mActivityManager.isInLockTaskMode() 

для получения более подробной информации, проверьте эту ссылку: http://developer.android.com/reference/android/app/ActivityManager.html#isInLockTaskMode%28%29

+0

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