【问题标题】:How to Disable Keyguard and display an activity to the user when receiver of SCREEN_ON is triggered?当 SCREEN_ON 的接收器被触发时,如何禁用 Keyguard 并向用户显示活动?
【发布时间】:2014-03-28 08:31:33
【问题描述】:

如何在 screen_on 激活广播接收器时禁用键盘保护,以便当它发生时用户看到我在它后面启动的活动? (活动已经开始了……)

我一直在尝试来自屏幕关闭触发的广播接收器的以下代码...

KeyguardManager  myKeyGuard = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
myLock = myKeyGuard.newKeyguardLock();
myLock.disableKeyguard();

它似乎并没有按原样工作。当我打开屏幕时,我仍然需要手动解锁手机上的键盘锁才能显示它背后的活动。

【问题讨论】:

  • 除此之外,我还遇到了一些使用 exitKeyguardSecurely() 的代码。虽然我还不能让它工作,所以我现在为我的活动设置标志 FLAG_DISMISS_KEYGUARD。
  • 瑞恩,你能分享你的代码吗?我也在做同样的事情。

标签: android keyguard


【解决方案1】:

如果您有一个需要在唤醒时越过锁屏顶部的窗口,我建议您使用窗口标志 dismiss_keyguard 或 show_when_locked。

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED

你如何使用它如下(在设置布局之前在onCreate中调用)

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

【讨论】:

  • 我知道这是一篇旧帖子,但无论我把它们放在哪里,这些标志都对我不起作用,另一方面,keyguard 管理器似乎总是有效。只是需要其他读者注意的一点
  • 确实,使用标志是“推荐”的解决方案,但是,您会发现它们在实际使用中远非完美。例如,带有标志的 android 在将活动移出焦点时会短暂“闪烁”键盘保护。这是次要的,但光栅。完全禁用键盘保护没有这个问题。
  • 请注意,Activity 根本不可能是透明的。此外,您也不能使用 dialog.getWindow() 来设置标志。这可能是为了不允许应用程序部分地“显示”来自其他应用程序的活动。看到这个问题code.google.com/p/android/issues/detail?id=8778
【解决方案2】:

我想我知道我做错了什么。使用 disable_keyguard 权限时,这似乎只是我清单中的一个标签错误。现在我更正了清单,它可以正常工作了。

【讨论】:

  • 添加此权限对我不起作用。当用户按下解锁按钮时,我需要运行我的活动。 Activity 应该在解锁屏幕之前触发。
【解决方案3】:

我没有看到 Keyguard 解决方案有效(并且已被弃用)。对我有用的是获取我从未释放的永久PARTIAL_WAKE_LOCK。这可以防止设备真正入睡,从而避免每次激活锁屏。

然后,每次屏幕关闭时,我都会收听该通知并重新唤醒设备。它适用于我测试过的所有设备。

我知道这会很快耗尽设备的电池,因此,您必须非常谨慎地使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多