Несколько лет назад я написал приложение для сигнализации, которое работало на Android 2, и теперь я пытаюсь обновить его для работы на Android 4. В частности, на Samsung Galaxy S4.
На Android 2, если телефон спал, он разбудил бы телефон и отобразил экран "Отложить или отклонить" на экране блокировки.
На Android 4 он разбудит телефон, но вам нужно его разблокировать, затем откройте область уведомлений, затем нажмите уведомление о тревоге, прежде чем вы сможете нажать "Отклонить".
Я всегда использовал этот код для пробуждения:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Я прочитал 8 различных вопросов по стековому потоку по этому вопросу. Большинство из них дают код выше, который работал на меня много лет назад в Android 2, но не работает в Android 4. Но ни один из них не помог мне решить эту проблему. Вот вопросы, которые я читал и пробовал:
Android: удалите или отключите программно экран блокировки на устройстве Samsung Galaxy S2
Как отобразить полноэкранное окно TYPE_SYSTEM_ALERT?
Как создать активность, которая видна поверх экрана блокировки
Действие Android по умолчанию по умолчанию заблокировано
заблокировано устройство Android, но хотите, чтобы звуковой сигнал и диалог отображались
экран блокировки диалогового окна Android
Показать диалог с сенсорными событиями по заблокированному экрану в Android 2.3
Есть ли у кого-нибудь идеи о том, что изменилось в Android 4, что могло вызвать это?
EDIT: Вот один из самых простых примеров, которые я видел в диалоговом окне тревоги, которое не возникает "сведено к минимуму". Это не так, как написано, появляется над заблокированным экраном, но вы можете исправить это с помощью WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
Он написан с помощью функции FragmentActivity и DialogFragment, но он по-прежнему работает как Activity. Он использует AlertDialog.Builder для создания диалога, и если вы попытаетесь сделать это с помощью XML-макета, это не сработает. Почему?