2011-12-09 12 views
43

Ho tre attività nella mia app. Voglio mantenere lo schermo sveglio quando è nella seconda attività. Lo schermo non dovrebbe spegnersi nella mia seconda attività a meno che il tasto "blocco" non venga premuto manualmente. Ho attraversato molti link ma a me non sembrano chiari.Mantieni lo schermo sveglio durante la mia attività

+0

Vedere la risposta di dettaglio qui ... http://stackoverflow.com/questions/5712849/how-do-i-keep-the-screen-on-in-my-app/24261889# 24261889 – Nepster

risposta

125

Come discusso nel tutorial Android Keep the Screen On, puoi farlo in pochi modi. È possibile impostare il FLAG_KEEP_SCREEN_ON sulla finestra della propria attività:

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

Un equivalente XML per questo è da aggiungere l'attributo android:keepScreenOn="true" alla vista radice del layout del vostro attività. Il vantaggio di impostare il flag a livello di codice è che è possibile utilizzare

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

quando non c'è più bisogno di forzare la schermata di rimanere, mentre la vostra attività è in esecuzione.

Un altro modo per controllare lo schermo (e alcune altre risorse) è quello di utilizzare un blocco scia:

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(); 

Il manifesto dovrà includere questa autorizzazione:

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

Tuttavia, come discusso nel tutorial, un wake lock è più appropriato per altri casi d'uso (come un servizio o un'attività in background che richiede alla CPU di continuare a funzionare mentre lo schermo è spento).

+1

funziona perfettamente! Grazie! – user838522

+6

La prima scelta è ** molto ** migliore ... non usare una serratura sveglia !!Richiede un'ulteriore autorizzazione nel manifest! http://stackoverflow.com/a/2134602/844882 –

+9

@AlexLockwood - Per l'applicazione dell'OP, il primo approccio è migliore. Tuttavia, è sbagliato adottare una politica di "non usare un wake lock!" Un wake lock fornisce un maggiore controllo sullo stato di attivazione dello schermo. Quando l'attività richiede solo lo schermo per essere tenuto acceso durante brevi periodi, è possibile rilasciare il blocco della sveglia, risparmiando la durata della batteria. Con il primo approccio, lo schermo rimane attivo per tutto il tempo in cui l'attività è in primo piano. Inoltre, il primo approccio non può essere utilizzato da un servizio che esegue lavori per conto di un'attività. –

6

Come ho capito la tua domanda, penso che devi usare WAKE_LOCK nella tua applicazione.

Qualcosa di simile,

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

E nel file manifest.xml dell'applicazione aggiungere questo,

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

questo funziona anche tu ... grazie! – user838522

1

tenta di utilizzare questo

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

Puoi aggiungere un ulteriore chiarimento su come la tua soluzione risolve il problema? Aiuterà l'OP a capire meglio la tua soluzione. – KLee1

38

Trovo questa soluzione molto più semplice:

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

Basta aggiungere questo per il layout di attività XML.

+4

È carino e pulito. – OneWorld

1

Questo codice è deprecato, utilizzare questo invece:

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

Dopo aver finito con l'utilizzo, chiamata (migliore soluzione è quella di chiamare questo metodo in modo OnDestroy di alcune attività):

wl.release(); 

Ulteriori informazioni su questo link

+2

[PowerManager.SCREEN_DIM_WAKE_LOCK] (http://developer.android.com/reference/android/os/PowerManager.html#SCREEN_DIM_WAKE_LOCK) è stato ritirato a favore di [WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON] (http://developer.android. it/reference/android/view/WindowManager.LayoutParams.html # FLAG_KEEP_SCREEN_ON) nel livello API 17. – anon

Problemi correlati