我正在尝试创建一个只要用户选择它就会保持清醒的应用程序 - 在方向改变的情况下它甚至会保持清醒。
最初,我通过在用户决定应用程序应该保持唤醒状态时创建一个唤醒锁来做到这一点,然后在 onPause() 处释放这个锁,这样它就不会永远保持下去。但是,当方向发生变化时,相关活动将被销毁并创建一个新活动 - 我看不到将唤醒锁“移交”给新实例的方法。
当然可以将其保存为已保存的实例状态 - 但是在活动被销毁时,人们不知道它是否是因为方向改变的原因,或者它是否被永久销毁。
有没有通用的方法来实现这一点?
我正在尝试创建一个只要用户选择它就会保持清醒的应用程序 - 在方向改变的情况下它甚至会保持清醒。
最初,我通过在用户决定应用程序应该保持唤醒状态时创建一个唤醒锁来做到这一点,然后在 onPause() 处释放这个锁,这样它就不会永远保持下去。但是,当方向发生变化时,相关活动将被销毁并创建一个新活动 - 我看不到将唤醒锁“移交”给新实例的方法。
当然可以将其保存为已保存的实例状态 - 但是在活动被销毁时,人们不知道它是否是因为方向改变的原因,或者它是否被永久销毁。
有没有通用的方法来实现这一点?
正如在Android: Wakelock & handling orientation change中也提到的,您可以在 onCreate() 中使用 FLAG_KEEP_SCREEN_ON 标志:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
如果您只需要该一项活动的唤醒锁,那应该就足够了,因此您甚至不需要唤醒锁权限。
我参加这个聚会有点晚了,但我是这样做的……
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "DoNotDimScreen");
其次是...
wl.acquire();
...当您需要实际激活唤醒锁时。
'PowerManager.ON_AFTER_RELEASE' 标志会触发用户活动计时器,因此当此唤醒锁被释放时屏幕会停留更长时间,当您的活动因方向改变而被破坏时就是这种情况。
非常适合我!
你可以来电isFinishing()。onPause()
http://developer.android.com/reference/android/app/Activity.html#isFinishing%28%29
可用的解决方案,如果您需要其他SCREEN_BRIGHT_WAKE_LOCK:请参阅我的答案here。
我认为你应该能够使用:
http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
...区分配置更改(方向)和实际终止