Android以编程方式获取锁定超时

时间:2013-05-19 13:35:19

标签: android locking screen

我正在编写一个应用程序,以便在手机锁定和屏幕关闭时显示锁定屏幕上的活动。 当用户离开活动时,应显示键盘锁。 检测手机是否被接收器锁定的常用方法 ACTION.SCREEN_OFF。 如果用户按下锁定按钮并屏幕关闭手机,它将完美地工作。 但是,在ICS之后,手机屏幕关闭后手机可能无法锁定。

那么,如何获得锁定事件或如何获得自动锁定的值如下图所示?

我知道inKeyguardRestrictedInputMode()是一种检查手机是否已锁定的方法。 但是当手机像接收器一样被锁定时,它无法自动报告。

The Screenshot from Setting in Android 4.1.2

2 个答案:

答案 0 :(得分:4)

您可以通过以下代码获取超时值:

mResolver = this.getContentResolver();
    long timeout = Settings.Secure.getInt(mResolver,
            "lock_screen_lock_after_timeout",
            0);

答案 1 :(得分:0)

我通过使用线程检查设备是否已锁定来解决。

服务中代码的一部分:

private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            Log.d("Receiver", "Screen ON");
        } else {
            new Thread(new mRunnable()).start();  
        }
    }
};

private Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case 1:
            Intent i = new Intent();
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.setClass(getBaseContext(), activity.class);
            startActivity(i);
            break;
        }
        super.handleMessage(msg);
    }
};

class mRunnable implements Runnable {
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            if (isLocked()) {
                mHandler.sendEmptyMessage(1);
                Thread.currentThread().interrupt();
            }
            else {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        }
    }
}

private boolean isLocked() {
    mKeyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
    return mKeyguardManager.inKeyguardRestrictedInputMode();
}

我在这里列出了其他找到答案的人。我刚刚起草作为解决方案,我还没有考虑代码和程序的性能。