Включить или отключить экран PatternLock из кода - PullRequest
4 голосов
/ 03 февраля 2010

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

Моя идея - написать сервис, который отключает шаблон после некоторой активности пользователя и повторно включает его через некоторое время. (и даже больше)

На рынке есть приложения, которые делают что-то подобное (например, AutoLock или TogglePattern), поэтому должно быть решение.

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

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

или

KeyguardLock.disableKeyguard()

Но я не об этом.

Я видел класс com.android.internal.widget.LockPatternUtils в источниках Android, который используется активностью настройки, но этот класс (по крайней мере, насколько я знаю) недоступен "нормальному" приложению.

Есть ли у вас какие-либо предложения?

Ответы [ 2 ]

4 голосов
/ 04 февраля 2010

Начиная с 2.0 (уровень API 5), вы можете использовать этот флажок окна, чтобы не показывать экран блокировки во время отображения вашего окна:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED

Вы также можете использовать этот флаг, чтобы разрешить снятие с охраны незащищенной клавиатуры при отображении вашего окна:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DISMISS_KEYGUARD

Обратите внимание, что они не позволяют вам обходить экран блокировки вне среды вашего приложения, что является преднамеренным проектным решением.

Существует также более старый API, который позволяет скрыть экран блокировки аналогично блокировке после пробуждения:

http://developer.android.com/reference/android/app/KeyguardManager.html#newKeyguardLock(java.lang.String)

Использование этого API не рекомендуется на более новых платформах, потому что очень легко ошибиться и вызвать плохое поведение (экран не блокируется, когда пользователь этого ожидает), и практически невозможно получить чистые переходы между действиями с разблокированным состояния. Например, это API-интерфейс, который первоначально использовался на экране вызова, чтобы скрыть экран блокировки, когда он отображался, но с версии 2.0 он переключился на новые чистые флаги окна. Аналогично для будильника и т. Д.

3 голосов
/ 04 февраля 2010

Вы пытались посмотреть на код для com.android.internal.widget.LockPatternUtils и делать то, что он делает?

У него есть что-то вроде этого:

public void setLockPatternEnabled(boolean enabled) {
    setBoolean(android.provider.Settings.System.LOCK_PATTERN_ENABLED, enabled);
}

private void setBoolean(String systemSettingKey, boolean enabled) {
    android.provider.Settings.System.putInt(
                    mContentResolver,
                    systemSettingKey,
                    enabled ? 1 : 0);
}

Возможно, вы сможете сделать что-то подобное в своем коде.

...