通过编程为Android打开屏幕



我需要在用户打开电源按钮时编程地打开屏幕,是的,是的,我在Activity中总是有正确的标志以保持屏幕,但并不能避免用户按下电源按钮。

到目前为止,我已经找到了一个解决方案,但是它使用了 dobedwakelock

sWakeLock = sPM.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, TAG_WAKELOCK);
sWakeLock.acquire();
sWakeLock.release();

有一种更好的方法来实现它?

在Lollipop中,您可能想添加更多标志:

final Window win = getWindow();
    win.addFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
            WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON );

我从aosp https://android.googlesource.com/platform/packages/pakages/papps/deskclock//dfd1960/src/src/com/android/deskclock/deskclock/alarms/alarms/alarmastivity.javafitive.javafitive.javafitive.javafitive.java

Div>

这是从活动中打开屏幕的最新方法:

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);
}

使用flag_turn_screen_on,但此标志已在API级别27中弃用,因此使用Activity.setTurnscreenon(true)从API级别27开始。

代码

 PowerManager powerManager = (PowerManager) context.getSystemService(context.POWER_SERVICE);
    PowerManager.WakeLock  wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |
            PowerManager.ACQUIRE_CAUSES_WAKEUP |
            PowerManager.ON_AFTER_RELEASE, "appname::WakeLock");
    //acquire will turn on the display
    wakeLock.acquire();
    //release will release the lock from CPU, in case of that, screen will go back to sleep mode in defined time bt device settings
    wakeLock.release();

在清单文件中,权限应为

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

最新更新