Android Lollipop - Обход блокировки экрана для всплывающей активности
я имеюActivity1
который является списком элементов. Каждый предмет можно посмотреть в отдельномActivity2
который отображается как всплывающее окно.Activity1
может быть запущен из фона и отображается, даже если экран заблокирован.Activity1
может также выбрать автоматическое отображение содержимого элемента на экране списка, запустивActivity2
, Мы можем обойти экран блокировки, потому что оба действия имеютWindowManagerFlags.DismissKeyguard
включен вOnCreate
метод.
До Android Lollipop все работало как положено. Но теперь всплывающее окноActivity2
не отображается, если устройство не разблокировано вручную. Если я изменюActivity2
быть на весь экранActivity
тогда, кажется, все работает (кроме перехода от одного действия к другому будет кратко отображаться экран блокировки). Любые идеи о том, как это исправить чисто?
Кроме того, я пробовал только устройства Galaxy S6 / S6 Edge, на которых установлена эта новая функция безопасности Knox.
редактировать я изменилсяActivity2
бытьDialogFragment
вместоActivity
, Это сработало для меня лучше всего, потому что предложенный ответ использовал код, который устарел или устарел в зависимости от целевого SDK.Activity1
использует следующие флаги для обхода экрана блокировки при необходимости.
getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
посколькуActivity2
сейчас простоDialogFragment
, он использует флажки окна родителяActivity1
, Я также удаляю эти флаги на"Android.intent.action.SCREEN_OFF" действие, чтобы действие обходило экран блокировки только при запуске в качестве уведомления, а не каждый раз, когда действие находится на вершине стека. Разрешения, указанные в ответе, обязательны.