web-dev-qa-db-ja.com

プログラムで画面をオンにする

画面のロックを解除してオンに切り替え、イベントトリガーにポップアップを表示したいと思います。を使用して画面のロックを解除できます

newKeyguardLock = km.newKeyguardLock(HANDSFREE);
newKeyguardLock.disableKeyguard();

on KeyGuardServiceですが、画面をオンにできません。使ってます

wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, HANDSFREE);
wl.acquire();

しかし、成功しませんでした。画面はオフのままです。どうすればこれを達成できますか?

19
Matroska

作者からのメモ:これは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();
33
undefined

これは非常に人気のある質問ですが、受け入れられた回答は現在古くなっています

以下は、画面をオンにする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) を使用できます。

3
VicJordan

メインアクティビティのOnCreate()に、次のコードを記述します。

((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG").acquire();

これにより、デバイスがウェイクアップします。

デバイスのロックを解除するには、disableKeyguard()を忘れないでください...

2
Amir Dashti

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();
    }
}
0
hmir