【问题标题】:Android WakeLock and KeyGuardAndroid WakeLock 和 KeyGuard
【发布时间】:2011-02-28 21:44:12
【问题描述】:

我只是想知道我这样做是否正确;我正在编写一个通知应用程序,它可以在手机睡眠时显示通知

  1. 禁用键盘锁
  2. 获取唤醒锁
  3. 显示通知
  4. 在用户不触摸屏幕时设置超时警报并重新启用键盘保护和释放唤醒锁。 4.1 用户触摸屏幕,我禁用定时器。什么也不做。完成并完成 4.2 用户不要触摸屏幕,所以重新启用键盘锁并释放唤醒锁。手机再次休眠

基本上我最想知道第 4.1 点。取消闹钟的pendingintent,什么都不做?还是应该以某种方式处理设置的keyguard和wakelock?

【问题讨论】:

标签: android


【解决方案1】:

实现自己的 Keyguard 替换的技巧如下:-

  • 在 onCreate 方法中,您不会禁用键盘保护,但此时用户可以与屏幕进行交互,因此您需要小心意外触摸。

     getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            LayoutParams.FLAG_TURN_SCREEN_ON | LayoutParams.FLAG_KEEP_SCREEN_ON);
    
    mKeyguardManager = (KeyguardManager)mContext.getSystemService(Context.KEYGUARD_SERVICE);
    mKeyguardLock = mKeyguardManager.newKeyguardLock(TAG);
    
  • 如果用户执行某些操作以表明他们想要更充分地进行交互,那么我们可以禁用键盘保护并继续前进。

    mKeyguardLock.disableKeyguard(); mKeyguardManager.exitKeyguardSecurely(null);

  • 如果他们不这样做,那么由于键盘保护没有被禁用,您不需要再做任何事情,只需完成您的活动

就是这样,但我仍在测试它。所以,我不是 100% 确定的。

【讨论】:

    【解决方案2】:

    我知道这个问题已经过时了,但 API 明确指出以编程方式尝试获取键盘锁解锁已被弃用。

    正确的策略是,在你的活动的 oncCreate 方法中,有:

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    

    希望这对其他人有所帮助。

    【讨论】:

    • 请在setContentView() 之前添加此代码,除非它无法正常工作。
    【解决方案3】:

    锁是全局的,当一个应用程序获取它时,它将关闭,直到锁被释放。 您应该始终重新启用锁。否则系统不会从 Home 或任何其他应用程序进入睡眠或锁定

    编辑:我不太确定它如何与 keyguard 一起使用:/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      相关资源
      最近更新 更多