应用描述:
该应用程序旨在作为特定客户端的安全程序(不公开部署)。当应用程序在一段时间内没有检测到移动时,应用程序应该发出警报,并且如果它在后台或设备处于睡眠状态,则将自己带到前台。
问题:
在设备睡眠和锁定的情况下,我们需要唤醒并解锁设备。使用这里发现的各种技术在SO和其他地方,我们已经能够(部分)唤醒和解锁设备,但只有当设备物理插入到计算机时,这只是正常。如果设备本身被拔出,并且我们测试唤醒解锁,没有发生;设备似乎保持睡眠,应用程序似乎什么也没做什么(没有报警)。
以下是目前用于唤醒设备的代码:
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应用程序,所以完全意识到,我们可能完全关闭我们正在努力做的。欢迎任何建议。
简而言之,考虑到上面的代码,为什么设备的行为是如此不同,基于它是否插入,我们应该改变,以便如上所述唤醒和解锁设备?预先感谢您的帮助!