2013-03-03 6 views
7

więc przez długi czas myślałem, że wiem, jak zatrzymać ekran przed przejściem do trybu uśpienia, po prostu stosować ten kod w mojej działalności:ekran Keep on w działalności - nie działa z FLAG_KEEP_SCREEN_ON

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

Jednak zdałem sobie sprawę, że działa to tylko wtedy, gdy mój telefon był w "trybie programisty", tj. Gdy debugowanie USB (Ustawienia -> Opcje programisty -> Debugowanie USB) zostało włączone/sprawdzone. Następnie powyższe kody rzeczywiście zatrzymują ekran/urządzenie, aby przejść do trybu uśpienia.

Kiedy to debugowanie nie jest sprawdzane, wtedy mój ekran zasypia, jakby nie było jutra. Na moim urządzeniu mam Androida 4.04 i

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

Ktoś słyszał o tym problemie?

EDIT

Ja testowałem z Commonswares sugestią, i dodał setKeepScreenOn() w kodzie, więc wygląda to tak:

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

Mam też sprawdzone tak, że ten kod jest faktycznie wykonane i tak jest. Ale to się nie zmienia ...

+0

Ill spróbować, ale wydaje się, że może pracować nawet FLAG_KEEP_SCREEN_ON jeśli aplikacja jest „wdrożone” przez Eclipse, ale * nie * jeśli mogę pobrać dokładnie ten sam kod z Google Play. A jednak wszyscy "na zewnątrz" w sieci mówią, że FLAG_KEEP_SCREEN_ON działa ... Nie mogę być jedynym z tym problemem? – Ted

+0

Ponieważ nigdy nie użyłem 'FLAG_KEEP_SCREEN_ON' i użyłem tylko' setKeepScreenOn() '(ponieważ jest to prostsze), nie mogę komentować skuteczności twojego kodu' FLAG_KEEP_SCREEN_ON'. – CommonsWare

+0

OK, nie działa również z funkcją setKeepScreenOn(). – Ted

Odpowiedz

1

Miałem do czynienia z tym samym problemem, użyłem jednego działania dla mojego projektu, a wszystkie inne ekrany są fragmentami, a następnie użyłem android:keepScreenOn="true" w głównej działalności.

proszę, spróbuj tego użyć i daj mi znać, jeśli nie uzyskałeś pożądanego rezultatu.

Dzięki.

1

Jedynym rozwiązaniem, które naprawdę działa w mojej aplikacji jest WakeLock w głównej klasie aplikacji. Niestety flaga SCREEN_BRIGHT_WAKE_LOCK jest przestarzała!

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(); 
    } 
} 
Powiązane problemy