我正在尝试创建一个只要用户选择它就会保持清醒的应用程序 - 它甚至会在方向更改的情况下保持清醒状态。
最初我通过在用户决定应用程序应该保持唤醒状态时创建唤醒锁定,然后在onPause()处释放此锁定来完成此操作,这样它就不会永久保留。但是,当方向发生变化时,有问题的活动会被销毁,并且会创建一个新的活动 - 而且我没有办法将唤醒锁定“移交”给新实例。
当然可以将其保存在已保存的实例状态中 - 但是在活动被销毁时,人们不知道它是否因为方向改变而被破坏,或者它是否被毁坏了。
是否有通用的方法来实现这一目标?
答案 0 :(得分:1)
如Android: Wakelock & handling orientation change中所述,您可以在onCreate()中使用FLAG_KEEP_SCREEN_ON标志:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
如果你只需要那个活动的唤醒锁,那就足够了,所以你甚至不需要获得唤醒锁许可。
答案 1 :(得分:0)
您可以在isFinishing()
中致电onPause()
。
http://developer.android.com/reference/android/app/Activity.html#isFinishing%28%29
答案 2 :(得分:0)
我认为你应该可以使用:
http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
...区分配置更改(方向)和实际终止
答案 3 :(得分:0)
我参加这个聚会有点迟了,但这就是我这样做的方式......
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”标志会激活用户活动计时器,以便在释放此唤醒锁定时屏幕保持打开状态,这将是您在更改方向时销毁活动时的情况。
完美适合我!
答案 4 :(得分:0)
如果您需要的不是SCREEN_BRIGHT_WAKE_LOCK
:see my answer here。