0

重复警告:此问题涉及 Android API 的详细信息,适用于从某些前端和服务调用,SO 上有许多类似的线程,但仅关注前端。

问题

我想以编程方式打开键盘保护,例如用户单击我的应用程序中的一个按钮并且手机被锁定(要使用手机用户必须先解锁它)。

问题是——我想找到一种坚如磐石的方法,它适用于每一种有效的情况。

尝试

我试过了:

  • lockNowwith DevicePolicyManager-- 当屏幕关闭(但手机未锁定)时,此呼叫将被忽略(即未激活键盘保护)

  • reenableKeyguardwith KeyguardManager.KeyguardLock-- 在所有可能的情况下都会忽略对方法的调用

  • goToSleepwith PowerManager-- 我不能调用它,因为权限问题,DEVICE_POWER尽管我已经有这个权限集,它仍然需要

到目前为止,我追求第一种方式(lockNow)与额外的黑客以某种方式处理屏幕关闭时的情况,但它非常丑陋,因此我希望有一些简单的方法。

4

1 回答 1

1

一种解决方案可能是在延迟后处理程序上使用线程。这里的问题是,即使屏幕关闭,线程也会保持活动状态,您的应用程序将处于暂停状态(除非进程被杀死)

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        keyLock.reenableKeyguard();
        Log.i("LOCK","key guard back on");
        finish();
    }
}, 300);

另一种方法是使用定时器任务,但有时定时器任务可能会被杀死(不确定,但我过去的经验说不确定)

TimerTask Active = new TimerTask() {
@Override
public void run() {
    keyLock.reenableKeyguard();
    Log.i("LOCK","key guard back on");
    finish();
    }
};
Timer starter = new Timer();
starter.schedule(Active, 300);

我不能 100% 确定这是您正在寻找的“坚如磐石的方式”,但我已经与设备策略管理器和键盘保护管理器一起工作了一段时间,我遇到了与 locknow() 类似的问题方法将关闭屏幕,然后重新打开具有以上 android 4.0 的设备。

我在查看 DDMS 调试日志并希望在某些设备上进行测试时遇到了这个解决方案。到目前为止,它并没有让我失望,所以无论如何这里是一个小费。

  1. 禁用键盘保护
  2. 调用 locknow()
  3. 使用上述方法在 300 毫秒左右重新启用键盘保护......(我更喜欢处理程序,它对我来说就像一个魅力)
于 2012-10-14T22:54:36.783 回答