我如何检测Android设备屏幕即将超时或“锁定”?

时间:2013-07-30 12:32:01

标签: android

我有一个Android应用程序需要检测屏幕什么时候会锁定 是否有可能发现屏幕将保持“UnLocked”多长时间?

2 个答案:

答案 0 :(得分:6)

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

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 );
屏幕关闭后会发送

ACTION_SCREEN_OFF,并在屏幕开启后发送ACTION_SCREEN_ON

更新:

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

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

答案 1 :(得分:1)

你必须使用" 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()..