Superdry Memorandom :-p

旧「superdry memorandum :-D」です

Androidアプリ側からスクリーンロックを解除し、画面表示する方法

KeyguardManager.KeyguardlockのdisableKeyguard()でスクリーンロックを解除し、PowerManager.newWakeLock()のacquire()で画面表示します。onResume()に以下のように実装する。

keyguardmanager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
keyguardlock = keyguardmanager.newKeyguardLock("FindMyPhone");
keyguardlock.disableKeyguard();

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

このままだとアプリ終了後もスリープに入らなくなってしまうので、アプリの終了時には元通りに戻さないといけないので、onPause()に以下のコードを実装する。

if (wakelock.isHeld()) {
	wakelock.release();
}
keyguardlock.reenableKeyguard();

Android Manifestには以下のパーミッションを追加する必要があります。

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />


※セキュリティロック(Screen Unlock Security)をかけてる場合はこの方法では解除できません。