应用说明:该应用程序旨在作为特定客户的安全程序(不公开部署)。 当应用程序在一段时间内未检测到移动时,如果应用程序在后台或设备处于睡眠状态,则应发出警报并将其置于前台。
问题:如果设备处于睡眠状态并被锁定,我们需要唤醒并解锁设备。 使用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应用程序,因此请充分意识到我们可能会完全放弃尝试做的事情。 欢迎任何建议。
简而言之,鉴于上述代码,为什么设备会根据是否插入而表现出如此不同,我们应该如何改变以唤醒和解锁设备? 预先感谢您的协助!