应用程序描述:应用程序旨在作为特定客户端的安全程序(不公开部署)。 当应用程序在一段时间内没有检测到移动时,如果应用程序在后台或设备处于睡眠状态,则该应用程序应该发出警报,并将其置于前台。 问题:如果设备处于睡眠和locking状态,则需要唤醒并解锁设备。 使用在SO和其他地方发现的各种技术,我们已经能够(部分地)唤醒和解锁设备,但是只有当设备物理插入计算机时,才能正常运行。 如果设备本身已经拔下,我们testing唤醒 – 解锁,什么也没有发生; 该设备似乎仍然睡着了,应用程序似乎什么也没有(没有警报)。 我已经使用这篇文章关于使用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); } }); } […]