Мне было интересно, кто-нибудь понимал, как заставить ваше приложение отображаться при разблокировке экрана. У меня есть приложение, в котором пользователь включает устройство Bluetooth, оно подключается к телефону, и пользователю должен быть представлен пользовательский интерфейс. Охота за приложением или использование меню уведомлений - нереальный вариант (слишком много работы и неочевидное поведение).
Проблема в том, что:
Когда экран разблокирован:
- вы можете вспомнить активность из фоновой службы, когда Bluetooth подключается к устройству
- Пользователь счастлив, потому что пользовательский интерфейс прямо там
Когда экран заблокирован:
- Приложение запускается, но уничтожается
- Пользователь разблокирует телефон, и ничего, кроме домашнего экрана
Одно из возможных решений - отключить защиту клавиатуры при пробуждении приложения, но ядерная опция - довольно плохой вариант.
PS:
Я знаю, что стандартное предположение Android состоит в том, что вы не должны этого делать В нормальном случае это нормально, но в этом случае я явно сделал что-то, что я хочу, чтобы телефон ответил, не добавляя больше работы для пользователя. Согласно рекомендациям Google, если вам не нравится это поведение, вы можете отключить его или не можете использовать приложение.
Еще несколько деталей, поэтому, посмотрев немного подробнее, проблема не обязательно в том, что вы не можете запустить какое-либо действие, когда экран заблокирован, разблокируйте его и ожидайте, что оно будет ждать. Это работает, если вы делаете что-то вроде следующего:
- блокировка устройства
- запускать приложение через Eclipse, когда телефон заблокирован / выключен
- разблокировать и он будет ждать вас
Но в случае, если действие уже запущено, и я открываю новое окно (которое оказывается прозрачным, говорит, что вы подключены и спрашиваете, что они хотят сделать). Проблема в том, что его убивают
E/BackgroundPOPUP( 2436): POPUP created via onCreate!
I/UsageStats( 78): Unexpected resume of com.test.POPUP while already resumed in com.android.launcher2
E/BackgroundPOPUP( 2436): POPUP onPause
E/MyBacgrkoundService( 2436): POPUP active!
I/ActivityManager( 78): Displayed activity com.test.POPUP/.PopupTest: 175 ms (total 175 ms)
I/UsageStats( 78): Something wrong here, didn't expect com.android.launcher2 to be paused
E/BackgroundPOPUP( 2436): POPUP has ended through a call to onStop
E/BackgroundPOPUP( 2436): POPUP has ended through a call to onDestroy
Настройка здесь следующая:
MyBackgroundService
- это служба, которая обрабатывает состояние Bluetooth (ожидает подключения, включает Bluetooth, если пользователь запускает приложение и т. Д.). Он запускает всплывающее BackgroundPOPUP
действие, которое запускает ViewFlipper. MyBackgroundService
начинается BackgroundPOPUP
через намерение.
BackgroundPOPUP
- это мероприятие с полупрозрачной темой (точнее, Theme.Translucent), оно показывает ViewFlipper с некоторыми инструкциями и предоставляет некоторые опции