2013-02-23 3 views
0

Я пытаюсь создать приложение, которое будет бодрствовать до тех пор, пока пользователь его выберет, - и он даже будет бодрствовать в случае изменения ориентации.android - сохранение блокировки следа через изменение ориентации?

Первоначально я сделал это, создав блокировку после того, как пользователь решит, что приложение не должно бодрствовать, а затем отпустив эту блокировку на onPause(), чтобы он не удерживался навсегда. но, когда происходит изменение ориентации, рассматриваемая деятельность разрушается, и создается новая, и я не вижу способа «передать» блокировку следа новому экземпляру.

Конечно, его можно сохранить в сохраненном состоянии экземпляра - но в то время, когда действие уничтожено, никто не знает, вызвано ли это изменением ориентации или если оно уничтожено навсегда.

Существует ли общий способ достижения этого?

ответ

0

Вы можете позвонить по телефону isFinishing() в onPause().

http://developer.android.com/reference/android/app/Activity.html#isFinishing%28%29

+0

спасибо за отзыв. хотя кажется, что это не так просто. например, WakeLock не является исчерпывающим, поэтому сохранить onSaveInstanceState() нецелесообразно. кроме того, активность по-прежнему разрушается при изменении ориентации, хотя она не заканчивается :( –

0

Я думаю, вы должны быть в состоянии использовать:

http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

... различать изменения конфигурации (ориентация) и реального прекращения

+0

спасибо - но у меня есть активность, а не фрагмент, и это, похоже, работает только для фрагментов –

+0

Вправо ... Посмотрите здесь: http : //developer.android.com/guide/components/fragments.html в разделе добавления фрагмента wo/пользовательского интерфейса. Пример очень похож на то, что вы пытаетесь сделать. –

1

Как упоминалось также в Android: Wakelock & handling orientation change, вы можете использовать флаг FLAG_KEEP_SCREEN_ON в onCreate():

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

Если вам нужен только wakelock для этого одного действия, этого должно быть достаточно, так что вам даже не понадобится разрешение на wakelock.

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» выдает таймер активности пользователя, поэтому экран остается включенным на некоторое время, когда эта блокировка бодрствования отпущена, что будет иметь место, когда ваша деятельность разрушена при изменении ориентации.

Прекрасно работает для меня!

0

Решение пригодно для использования, если вам нужно, кроме SCREEN_BRIGHT_WAKE_LOCK: see my answer here.

Смежные вопросы