我如何检测android设备屏幕何时即将超时或;锁";?

我如何检测android设备屏幕何时即将超时或;锁";?,android,Android,我有一个android应用程序,需要检测屏幕何时会锁定。 是否可以发现屏幕将“解锁”多长时间?您需要注册一个广播接收器。当设备进入睡眠状态时,您的系统将发送brodcast。在需要的地方放置以下代码: private BroadcastReceiver receiver = new BroadcastReceiver() { public void onReceive(final Context context, final Intent intent) { //check if the b

我有一个android应用程序,需要检测屏幕何时会锁定。

是否可以发现屏幕将“解锁”多长时间?

您需要注册一个广播接收器。当设备进入睡眠状态时,您的系统将发送brodcast。在需要的地方放置以下代码:

private BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(final Context context, final Intent intent) {
  //check if the broadcast is our desired one
  if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))
//here define your method to be executed when screen is going to sleep

}};
您需要注册您的接收者:

    IntentFilter regFilter = new IntentFilter();
// get device sleep evernt
regFilter .addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver, regFilter );
在屏幕关闭后发送,在屏幕打开后发送

更新:

1.方法1:据我所知,你不能在你的设备进入睡眠状态之前设置一个监听器。PowerManager中没有这样的监听器。我想到的一个解决方案是,在你的应用程序中设置一个倒计时。每次用户触摸屏幕时,应重置倒计时。通过这种方式,您可以猜测设备进入睡眠的时间,然后在设备进入睡眠前设置唤醒锁并运行所需代码,然后禁用唤醒锁并将设备置于睡眠状态

2.方法2:当设备进入睡眠状态时,将调用活动的inpuse()方法。您可能可以在那里编写一些代码。只是想一想。

您必须使用“Wakelock”。。 试试这个代码

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
     wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "whatever");wl.acquire();
别忘了在你的聚会上得到许可 “android.permission.WAKE_LOCK”
然后在pouse()方法中编写wl.release()。

您可以订阅接收带有动作的广播,但它会在屏幕关闭后发送。加力燃烧室-由于这一点,它“几乎”符合我的要求,我需要知道它何时会锁定,例如,当它“时间用完”时,而不是当它“时间用完”时。对于我的要求,接收器的方法将延迟。我需要一个“倒计时”屏幕锁定。android必须有一个到期计时器(或类似的东西),知道何时锁定屏幕或超时时间已经过期。我能进入那个计时器吗?@user423199我知道你真正想做的事,遗憾的是,我不知道有什么干净的方法。我更新了答案。希望能有所帮助。我一直在通过android源代码寻找满足我需求的解决方案。我发现这个类NetworkPolicyManagerService有一个名为“com.android.server.net.action.SNOOZE_WARNING”的私有操作意图,听起来可能正是我需要倾听的。我能用这个吗?我是否需要在清单中具有“管理网络”策略权限?