我正在编写一个应用程序,以便在手机锁定和屏幕关闭时显示锁定屏幕上的活动。 当用户离开活动时,应显示键盘锁。 检测手机是否被接收器锁定的常用方法 ACTION.SCREEN_OFF。 如果用户按下锁定按钮并屏幕关闭手机,它将完美地工作。 但是,在ICS之后,手机屏幕关闭后手机可能无法锁定。
那么,如何获得锁定事件或如何获得自动锁定的值如下图所示?
我知道inKeyguardRestrictedInputMode()
是一种检查手机是否已锁定的方法。
但是当手机像接收器一样被锁定时,它无法自动报告。
答案 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();
}
我在这里列出了其他找到答案的人。我刚刚起草作为解决方案,我还没有考虑代码和程序的性能。