我有一个需要检测屏幕何时锁定的 android 应用程序。
是否有可能发现屏幕将保持“解锁”状态多长时间?
问问题
2842 次
2 回答
8
您需要注册一个广播接收器。当设备进入睡眠状态时,您的系统将发送一个广播。将以下代码放在任何需要的地方:
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内部没有这样的监听器。我想到的一个解决方案是让设备从设置中超时,然后在你的应用程序中设置一个倒数计时器。每次用户触摸屏幕时都应重置倒计时。这样,您可能会猜测设备进入睡眠的时间,然后在设备进入睡眠之前设置唤醒锁并运行您想要的代码,然后禁用唤醒锁并使设备进入睡眠状态。
2.方法 2:当您的设备进入睡眠状态时,您的活动的 inPause() 方法被调用。你也许可以在那里做一些代码。只是一个想法。
于 2013-07-30T12:39:42.527 回答
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() ..
于 2013-07-30T13:15:33.720 回答