【问题标题】:Turn ON Screen programmatically on Android在 Android 上以编程方式打开屏幕
【发布时间】:2015-05-07 01:50:07
【问题描述】:

当用户使用电源按钮关闭时,我需要以编程方式打开屏幕,是的,Activity 中始终有正确的标志来保持屏幕打开,但这并不能避免用户按下电源按钮。

到目前为止,我找到了一个解决方案,但它使用了已弃用的唤醒锁

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

sWakeLock.acquire();
sWakeLock.release();

有更好的方法来实现吗?

【问题讨论】:

  • 所以用户已经给出了他们想要关闭屏幕的明确、明确的信号,但您知道吗?这听起来像是一个可怕的用户界面。
  • 屏幕应该一直亮着,我想防止在特定情况下意外按下电源按钮

标签: android screen powermanager


【解决方案1】:

在 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/apps/DeskClock/+/dfd1960/src/com/android/deskclock/alarms/AlarmActivity.java得到这个

【讨论】:

  • 乐于助人!和贪婪的我 - 请把我的答案标记为正确?谢谢!
  • 我不是提出问题的人。我刚刚看到它有效,投票并表示感谢
【解决方案2】:

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

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 中已被弃用,因此从 API 级别 27 开始使用Activity.setTurnScreenOn(true)

【讨论】:

  • 谢谢。这些信息非常有用。
  • 这在华为上不起作用,但感谢它起作用了,直到我添加了更多 FLAGS,例如@rubmz 提到的 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
【解决方案3】:

代码

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

在Manifest文件中,权限应该是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 2015-01-28
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多