2013-03-03 10 views
7

Così, per molto tempo ho pensato che sapevo come fermare lo schermo di andare in modalità sleep, ho semplicemente usato questo codice nel mio attività:Tenere schermo in attività - non funziona con FLAG_KEEP_SCREEN_ON

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

Tuttavia, mi sono reso conto che questo ha funzionato solo quando il mio telefono era in "modalità sviluppatore", vale a dire quando il debug USB (Impostazioni -> opzioni sviluppatore -> debug USB) è stato abilitato/selezionata. Quindi i suddetti codici fermano effettivamente lo schermo/dispositivo per andare a dormire.

Quando il debug non è selezionato, il mio schermo va a dormire come se non ci fosse un domani. Sono in esecuzione Android 4.04 sul mio dispositivo e

android:minSdkVersion="12" 
android:targetSdkVersion="16" 

Qualcuno ha sentito parlare di questo problema?

EDIT

Ho testato con Commonswares suggestione, e ha aggiunto la setKeepScreenOn() al codice, in modo che assomiglia a questo:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
View root = findViewById(android.R.id.content); 
if (root != null) 
    root.setKeepScreenOn(true); 

Inoltre ho controllato in modo che questo codice è effettivamente eseguito, ed è. Ma non cambia nulla ...

+0

Ill provare, ma sembra che il FLAG_KEEP_SCREEN_ON potrebbe anche funzionare se l'applicazione è "schierato" via Eclipse, ma * non * se scarico lo stesso codice esatto da Google Play. Eppure, tutti "fuori là" sulla rete dicono che FLAG_KEEP_SCREEN_ON funziona ... Non posso essere l'unico con questo problema? – Ted

+0

Dal momento che non ho mai usato 'FLAG_KEEP_SCREEN_ON', e solo abbia mai usato' setKeepScreenOn() '(come è più semplice), non posso commentare quanto riguarda l'efficacia del vostro' codice FLAG_KEEP_SCREEN_ON'. – CommonsWare

+0

Ok, non funziona anche con setKeepScreenOn(). – Ted

risposta

1

mi trovavo di fronte allo stesso problema, stavo usando un'attività per il mio progetto e tutti gli altri schermi sono frammenti, quindi ho usato il android:keepScreenOn="true" nell'attività principale.

per favore prova a usare questo e fammi sapere se non hai ottenuto il risultato desiderato.

Grazie.

1

unica soluzione che funziona davvero nel mio app è Wakelock nella classe di applicazione principale. Sfortunatamente il flag SCREEN_BRIGHT_WAKE_LOCK è deprecato!

public class MyApp extends Application { 
    PowerManager.WakeLock screenOnWakeLock; 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
     wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"ScreenlockTag"); 
     wakeLock.acquire(); 
    } 

    @Override 
    public void onTerminate() 
    { 
     if (screenOnWakeLock != null && screenOnWakeLock.isHeld()) 
      screenOnWakeLock.release(); 
     super.onTerminate(); 
    } 
}