2011-07-05 16 views
7

Pracuję na systemie Android 3.0 i muszę znać w mojej aplikacji, gdy urządzenie przechodzi w tryb uśpienia/wyłączania ekranu.Jak zarejestrować się w trybie uśpienia w systemie Android?

Jak mogę zarejestrować się w tym celu/zdarzeniu, aby móc wykonać pewne czynności, gdy tak się stanie? Czy istnieje jakieś działanie w BroadcastReceiver, które powiadamia o tym?

+1

@Yaniv: „Muszę wiedzieć, w mojej aplikacji, gdy urządzenie przechodzi na sen/wyłączyć ekran. " -- czemu? 99,999% aplikacji na Androida nie potrzebuje tego. Jedyny sposób, aby to zrobić, zakłada zachowanie dość wrogie dla użytkownika (np. Zawsze działająca usługa). Wyjaśnij więc, co próbujesz osiągnąć, abyśmy mogli znaleźć lepsze rozwiązanie. – CommonsWare

Odpowiedz

13

This strona ma samouczek dokładnie tego, czego szukasz.

kod skopiowane z tej strony (aby włączyć ten z linku tylko odpowiedzieć na coś bezpośrednio przydatne):

1) Tworzenie klasy w aplikacji, aby otrzymać intencji. Na przykład, następujący odbiornik stoi sam i ustawia zmienną statyczną do wykorzystania w części 2:

2) Zmienić swoją aktywność, aby otrzymać ekran włączania/wyłączania zdarzeń. Odbiornik będzie sprawdzić zmienną statyczną w odbiorniku transmisji poznać przyczynę zamiarem po prostu odebrane:

public class ExampleActivity extends Activity { 
    @Override 
    protected void onCreate() { 
     // initialize receiver 
     IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
     filter.addAction(Intent.ACTION_SCREEN_OFF); 
     BroadcastReceiver mReceiver = new ScreenReceiver(); 
     registerReceiver(mReceiver, filter); 
     // your code 
    } 

    @Override 
    protected void onPause() { 
     // when the screen is about to turn off 
     if (ScreenReceiver.wasScreenOn) { 
      // this is the case when onPause() is called by the system due to a screen state change 
      System.out.println("SCREEN TURNED OFF"); 
     } else { 
      // this is when onPause() is called when the screen state has not changed 
     } 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     // only when screen turns on 
     if (!ScreenReceiver.wasScreenOn) { 
      // this is when onResume() is called due to a screen state change 
      System.out.println("SCREEN TURNED ON"); 
     } else { 
      // this is when onResume() is called when the screen state has not changed 
     } 
     super.onResume(); 
    } 
} 
+4

Czy możliwe jest rozróżnienie trybu uśpienia ręcznego (wykonane przez użytkownika, naciśnięcie przycisku zasilania) i automatycznego zasypiania (po X minutach)? –

Powiązane problemy