我有关于唤醒的问题。 在下面显示的情况下,android操作系统是否会释放唤醒锁( PARTIAL_WAKE_LOCK如果您需要指定的话),以防止唤醒锁被遗弃并浪费电池直到closures电源(不睡眠)。 案例1-a: 应用程序已经在它的一个线程中获得了wakelock(w / o timeout选项)(在这种情况下请认为是合理的),并且在关键任务完成时它被devise为释放唤醒锁。 应用程序可以被任务pipe理器或臭名昭着的taskkiller杀死,应用程序没有机会让其线程释放wakelock。 那个wakelock发生了什么事? 案例1-b: (如果对案例1-a的回答是“是的,别担心”,那么请忽略这种情况)。与案例1-a相同,但是应用程序给了唤醒锁的超时选项,比如说3秒。 这个超时选项是否保持有效? 案例2-a: 请想象有一个由AlarmManager(通过广播接收器)启动的服务,并且该服务已经获得唤醒锁(不带超时选项)。 这项服务的目的是使获得时间最less。 但不幸的是,由于内存紧缩,Android操作系统select了这个服务来杀死。 (我不知道操作系统在获取wakelock的时候是不是会杀了服务器,但是我猜操作系统并不在意,但是我希望操作系统稍后会释放wakelock。)那个wakelock会发生什么? 案例2-b: (如果对案例2-a的回答是“是,别担心”,那么请忽略这种情况。)与情况2-a相同,但是服务给予唤醒锁的超时选项,例如3秒。 这个超时选项是否保持有效?
应用程序描述:应用程序旨在作为特定客户端的安全程序(不公开部署)。 当应用程序在一段时间内没有检测到移动时,如果应用程序在后台或设备处于睡眠状态,则该应用程序应该发出警报,并将其置于前台。 问题:如果设备处于睡眠和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); } }); } […]
我正试图在某个动作发生后打开和closures显示器(让我们只是担心现在closures屏幕)。 从我从wake lock所了解到的,这就是我所拥有的: PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 当我读到其他post在stackoverflow和其他地方,他们似乎告诉我,PARTIAL_WAKE_LOCK将closures屏幕。 但是,如果我阅读SDK说,它只会允许屏幕closures。 所以我认为这是不对的。 任何提示将有所帮助! 谢谢, 麦克风