画面のロックを解除してオンに切り替え、イベントトリガーにポップアップを表示したいと思います。を使用して画面のロックを解除できます
newKeyguardLock = km.newKeyguardLock(HANDSFREE);
newKeyguardLock.disableKeyguard();
on KeyGuardService
ですが、画面をオンにできません。使ってます
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, HANDSFREE);
wl.acquire();
しかし、成功しませんでした。画面はオフのままです。どうすればこれを達成できますか?
作者からのメモ:これは2012年に書き戻しました。もう機能するかどうかはわかりません。他のより最近の回答を必ずチェックしてください。
アミールの答えは私を近づけましたが、少なくともACQUIRE_CAUSES_WAKEUP
フラグが必要です(Android 2.3.3に対して構築)。
WakeLock screenLock = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
screenLock.acquire();
//later
screenLock.release();
これは非常に人気のある質問ですが、受け入れられた回答は現在古くなっています。
以下は、画面をオンにするORアクティビティからデバイス画面をウェイクアップする最新の方法です:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
this.setTurnScreenOn(true);
} else {
final Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON を使用しますが、FLAG_TURN_SCREEN_ONフラグはAPI level 27
で非推奨になっているため、API level 27
以降で Activity.setTurnScreenOn(true) を使用できます。
メインアクティビティのOnCreate()に、次のコードを記述します。
((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG").acquire();
これにより、デバイスがウェイクアップします。
デバイスのロックを解除するには、disableKeyguard()を忘れないでください...
nullPointerチェックとタイムアウトの設定によるundefinedの答え:
private void turnOnScreen() {
PowerManager.WakeLock screenLock = null;
if ((getSystemService(POWER_SERVICE)) != null) {
screenLock = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
screenLock.acquire(10*60*1000L /*10 minutes*/);
screenLock.release();
}
}