Активность Android отображается после того, как пользователь разблокирует экран - PullRequest
0 голосов
/ 31 марта 2010

Мне было интересно, кто-нибудь понимал, как заставить ваше приложение отображаться при разблокировке экрана. У меня есть приложение, в котором пользователь включает устройство 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 с некоторыми инструкциями и предоставляет некоторые опции

1 Ответ

0 голосов
/ 31 марта 2010

Вы можете использовать метод KeyGuardManager public void exitKeyguardSecurely (обратный вызов KeyguardManager.OnKeyguardExitResult)

Надежно выйдите из клавиатуры. Использование Дело в том, что после этого API, после отключение клавиатуры, вашего приложения, который получил разрешение на отключить защиту клавиатуры и показать ограниченное количество информации считается безопасно без прохождения пользователем Keyguard, необходимо перейти к то, что небезопасно для просмотра не проходя мимо клавиатуры. Это произойдет, если клавиатура защищена, поднять экран разблокировки клав. Параметры обратного вызова Давайте Вы знаете, была ли операция успешно и безопасно запускать все, что обычно считается безопасным, как только пользователь прошел мимо клавиатуры.

Я не уверен на 100%, что это соответствует тому, что вы хотите сделать.

Другой вариант - проверить, включена ли клавиатура во время пробуждения вашего приложения, с помощью общедоступного логического inKeyguardRestrictedInputMode () и остановить ли его пробуждение до тех пор, пока клавиатура не будет разблокирована

...