画面をロック解除

2011/07/11

Manifestファイルに追加


    
    

KeyguardManager、KeyguardLock を利用する

Context から KeyguardManager を取得し KeyguardManager.KeyguardLock でスクリーンロックをはずします。

KeyguardManager.OnKeyguardExitResult ハンドラが呼ばれると PowerManager.WakeLock でスクリーンスリープから復帰します。

[java] protected WakeLock wakelock; protected KeyguardManager keyguardmanager; protected KeyguardLock keyguardlock;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

            setContentView(R.layout.alarm);

    final Context _context = this.getApplicationContext();
    keyguardmanager = (KeyguardManager) _context.getSystemService(Context.KEYGUARD_SERVICE);
    keyguardlock = keyguardmanager.newKeyguardLock("FindMyPhone");
    keyguardlock.disableKeyguard();

    keyguardmanager.exitKeyguardSecurely(new OnKeyguardExitResult() {
        public void onKeyguardExitResult(boolean success) {
            wakelock = ((PowerManager) _context.getSystemService(Context.POWER_SERVICE))
                    .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "FindMyPhone");
            wakelock.acquire();
        }
    });
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (wakelock != null && wakelock.isHeld()) {
        wakelock.release();
    }
    if (keyguardlock != null) {
        keyguardlock.reenableKeyguard();
    }
}

[/java]

onDestroy() のライフサイクルでキーロックと スクリーンを戻してますが、ちょっと疑問です。 アプリの仕様にもよると思いますが、スクリーンロックは最初の状態にちゃんと戻さないと、予期しない問題が起こるとの事です。