Android WakeLock и KeyGuard - PullRequest
       1

Android WakeLock и KeyGuard

1 голос
/ 08 июня 2010

Мне просто интересно, правильно ли я это делаю; Я программирую приложение для уведомлений, которое может отображать уведомление, когда телефон спит

  1. Отключить блокировку клавиатуры
  2. Aquire Wake Lock
  3. Показать уведомление
  4. Установка будильника для тайм-аута и повторного включения клавиатуры и разблокировки wakelock, если пользователь не касается экрана. 4.1 Пользователь касается экрана, и я отключаю таймер. Больше ничего не делай. Сделано и сделано 4.2 Пользователь не прикасается к экрану, поэтому включите защиту клавиатуры и отпустите wakelock. Телефон снова спит

В основном мне больше всего интересен пункт 4.1. отменить ожидание тревоги и больше ничего не делать? или нужно ли каким-то образом иметь дело с установленными клавиатурным щитом и вейк-замком?

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Уловка для реализации вашей собственной замены Keyguard выглядит следующим образом: -

  • В методе onCreate вы не отключаете защиту клавиатуры, но пользователь может взаимодействовать с экраном на этом этапе, поэтому вам следует быть осторожным при случайных касаниях.

     getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            LayoutParams.FLAG_TURN_SCREEN_ON | LayoutParams.FLAG_KEEP_SCREEN_ON);
    
    mKeyguardManager = (KeyguardManager)mContext.getSystemService(Context.KEYGUARD_SERVICE);
    mKeyguardLock = mKeyguardManager.newKeyguardLock(TAG);
    
  • Если пользователь выполняет какое-либо действие, чтобы указать, что он хочет взаимодействовать более полно, тогда мы можем отключить защиту клавиатуры и двигаться дальше.

    mKeyguardLock.disableKeyguard(); mKeyguardManager.exitKeyguardSecurely(null);

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

Вот и все, но я все еще проверяю это. Так что я не уверен на 100%.

1 голос
/ 11 апреля 2012

Я знаю, что этот вопрос старый, но API четко заявляет, что программная попытка получить разблокировку клавиатуры не рекомендуется.

В методе oncCreate вашей деятельности правильная стратегия:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Надеюсь, это поможет другим.

0 голосов
/ 08 июня 2010

Блокировки являются глобальными, и когда одно приложение получает их, оно будет отключено до снятия блокировки. Вы должны всегда включать замки. В противном случае система не перейдет в режим сна или блокировки из дома или из любого другого приложения

РЕДАКТИРОВАТЬ: я не совсем уверен, как это работает с keyguard: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...