2011-12-09 16 views
43

Mam trzy aktywności w mojej aplikacji. Chcę, żeby ekran się obudził, gdy jest w drugim działaniu. Ekran nie powinien wyłączać się podczas mojej drugiej aktywności, chyba że przycisk "blokada" zostanie naciśnięty ręcznie. Przeszedłem wiele linków, ale wydają mi się one niejasne.Utrzymuj ekran przez całą moją aktywność

+0

Zobacz szczegółową odpowiedź tutaj ... http://stackoverflow.com/questions/5712849/how-do-i-keep-the-screen-on-in-my-app/24261889# 24261889 – Nepster

Odpowiedz

125

Jak wspomniano w tutorialu Android Keep the Screen On, możesz to zrobić na kilka sposobów. Można ustawić FLAG_KEEP_SCREEN_ON na oknie za aktywność:

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

Równoważny XML do tego celu jest dodanie atrybutu android:keepScreenOn="true" do widoku głównego układu swoją aktywność użytkownika. Zaletą ustawienie flagi programowo jest to, że można użyć

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

gdy nie jest już potrzebna, aby wymusić, aby pozostać na ekranie w czasie, gdy działalność jest uruchomiony.

Innym sposobem kontrolowania ekranu (i niektórych innych zasobów) jest użycie blokady budzenia:

mWakeLock = ((PowerManager) getContext().getSystemService(Context.POWER_SERVICE)) 
    .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName()); 
mWakeLock.acquire(); 
// screen stays on in this section 
mWakeLock.release(); 

Manifest będą musiały zawierać to uprawnienie:

<uses-permission android:name="android.permission.WAKE_LOCK"/> 

Jednakże, jak wspomniano w samouczku blokada wybudzenia jest bardziej odpowiednia dla innych przypadków użycia (takich jak usługa lub zadanie w tle wymagające, aby procesor działał, gdy ekran jest wyłączony).

+1

działa idealnie! dzięki! – user838522

+6

Pierwszy wybór to ** dużo ** lepsze ... nie używaj blokady wybudzania !!Wymaga dodatkowej zgody w manifeście! http://stackoverflow.com/a/2134602/844882 –

+9

@AlexLockwood - W przypadku aplikacji OP pierwsze podejście jest lepsze. Jednak błędem jest przyjęcie zasady "nie używaj blokady wybudzania!" Blokada wybudzania zapewnia większą kontrolę nad stanem ekranu. Gdy działanie wymaga jedynie utrzymania ekranu przez krótki czas, blokada wybudzania może zostać zwolniona, co oszczędza baterię. Przy pierwszym podejściu ekran jest utrzymywany przez cały czas, gdy aktywność jest na pierwszym planie. Ponadto pierwsze podejście nie może być stosowane przez usługę wykonującą pracę w imieniu działania. –

6

Jak rozumiem twoje pytanie, myślę, że musisz użyć WAKE_LOCK dla niego w swojej aplikacji.

Coś,

final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"");  
mWakeLock.acquire(); 

I manifest.xml Plik w używanej aplikacji dodać to,

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
+0

to działa też .. dzięki! – user838522

1

Spróbuj skorzystać z tej

getWindow().addFlags(
         WindowManager.LayoutParams.FLAG_FULLSCREEN 
           | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
+0

Czy możesz dodać trochę więcej wyjaśnień, w jaki sposób Twoje rozwiązanie rozwiązuje problem? Pomoże OP lepiej zrozumieć Twoje rozwiązanie. – KLee1

38

znajdę rozwiązanie to znacznie łatwiejsze:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" // Whatever your layout is 
    ... 
    android:keepScreenOn="true"> // Add this line 

Wystarczy dodać do swojej aktywności układu XML.

+4

To jest ładne i czyste. – OneWorld

1

Ten kod jest przestarzała, użyj zamiast tego:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); 
wl.acquire(); 

Po zakończeniu z użytkowania, call (najlepszym rozwiązaniem jest wywołanie tej metody w metodzie onDestroy jakiejś aktywności):

wl.release(); 

Więcej informacji na ten temat na temat tego link

+2

[PowerManager.SCREEN_DIM_WAKE_LOCK] (http://developer.android.com/reference/android/os/PowerManager.html#SCREEN_DIM_WAKE_LOCK) został przestarzały na rzecz [WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON] (http://developer.android. com/reference/android/view/WindowManager.LayoutParams.html # FLAG_KEEP_SCREEN_ON) na poziomie API 17. – anon

Powiązane problemy