应用程序描述: 该应用程序旨在作为特定客户的安全程序(不公开部署)。当应用程序在一段时间内未检测到移动时,如果应用程序处于后台或设备处于睡眠状态,则应用程序应发出警报并将其自身带到前台。
问题: 如果设备处于睡眠状态并被锁定,我们需要唤醒并解锁设备。使用在 SO 和其他地方发现的各种技术,我们已经能够(部分)唤醒和解锁设备,但是只有在设备物理插入计算机时才能正常运行。如果设备自己拔掉插头,我们测试唤醒解锁,什么都不会发生;设备似乎保持睡眠状态,应用程序似乎什么都不做(没有警报)。
我使用过这篇关于使用 PowerManager 和 KeyguardManager的文章,以及这篇文章使用窗口标志。
以下是目前用于唤醒设备的代码:
public void wakeDevice() {
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();
runOnUiThread(new Runnable(){
public void run(){
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
});
}
从我看到/使用的其他一些 SO 问题的评论和帖子来看,似乎 PowerManager / KeyguardManager 代码应该可以解决问题。同样,正如我之前所说,当设备通过 USB 插入开发机器时,它在技术上确实有效,但在设备分离时绝对没有任何作用。
另请注意,这是我们的第一个 Android 应用程序,因此完全意识到我们可能完全偏离了我们正在尝试做的事情。欢迎任何建议。
所以简而言之,鉴于上面的代码,为什么设备的行为会根据它是否插入而如此不同,我们应该改变什么来唤醒和解锁设备?预先感谢您的协助!