2

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

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

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

Android 4.1.2 中的设置截图

4

2 回答 2

4

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

mResolver = this.getContentResolver();
    long timeout = Settings.Secure.getInt(mResolver,
            "lock_screen_lock_after_timeout",
            0);
于 2013-06-23T14:00:55.300 回答
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();
}

我在这里为其他正在寻找答案的人列出了它。我只是草拟一个解决方案,还没有考虑代码和程序的性能。

于 2013-05-21T07:15:04.613 回答