2010-04-04 12 views
8

Próbuję wywołać funkcję BroadcastReceiver, gdy ekran jest włączony. W moim AndroidManifest.xml Mam określone: ​​android.intent.action.SCREEN_ON nie działa jako filtr intencji odbiornika

   <receiver android:name="IntentReceiver"> 
        <intent-filter> 
          <action android:name="android.intent.action.SCREEN_ON"></action> 
        </intent-filter> 
       </receiver> 

wydaje się jednak odbiornik nie jest wywoływany (wartości graniczne nie ogień, wypowiedzi ignorowane zalogować). Wymieniłem SCREEN_ON na BOOT_COMPLETED na test, a ten ma wywołać.

Jest to projekt w wersji 1.6 (pakiet SDK na poziomie 4).

Wyszukiwarka Google Code ujawniła to, pobrałem projekt i zsynchronizowałem go, przekonwertowałem go do pracy z najnowszymi narzędziami, ale także nie jest w stanie przechwycić tego zdarzenia.

http://www.google.com/codesearch/p?hl=en#_8L9bayv7qE/trunk/phxandroid-intent-query/AndroidManifest.xml&q=android.intent.action.SCREEN_ON

Czy to być może nie jest już obsługiwany?

Wcześniej udało mi się przechwycić to wydarzenie z powodzeniem wywołania Context.registerReceiver() jak tak

registerReceiver(new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    // ... 
    } 
}, new IntentFilter(Intent.ACTION_SCREEN_ON)); 

Jednak ta została wykonana przez serwis długowiecznych. Po porady mędrców z CommonsWare wybrałem, aby spróbować usunąć długowieczną usługę i użyć różnych technik. Ale wciąż muszę wykryć ekran i zdarzenia.

Odpowiedz

13

Po poradę szałwii z CommonsWare mam wybrany, aby spróbować usunąć długo dzienną usługi i korzystać z różnych technik.

Właściwie uważam, moja rada była bardziej jasnoniebieskim ... :-)

Ale nadal trzeba wykryć ekran wyłączyć i wydarzeń.

Istnieją pewne zdarzenia, w przypadku których Android nie chce uruchamiać nowych procesów, więc urządzenie nie jest zbyt wolne od wszelkiego rodzaju rzeczy, które wszystkie muszą być uruchamiane jednocześnie. ACTION_SCREEN_ON jest jednym z nich. Zobacz tę previous question, aby uzyskać jasnoniebieskie porady na ten temat.

Musisz więc zadać sobie pytanie: "Czy ja naprawdę muszę kontrolować te wydarzenia?". Zasadniczy zespół Androida chciałby, jeśli Twoja odpowiedź brzmi "nie".

+2

Dzięki CW.Byłoby cudownie, gdyby było jakieś ostrzeżenie w czasie wykonywania lub w dokumentacji o ACTION_SCREEN_ON niemożliwe do złapania. Złożę ten plik pod "gotcha". –

+1

Tak, myślę, że udokumentowali, że "ACTION_BATTERY_CHANGED" - kwintesencja tego zjawiska - zachowuje się w ten sposób, ale zdecydowanie pominęli ten. Jeśli wyszukasz hasło "ACTION_SCREEN_ON" w kodzie źródłowym (np. Za pomocą Google Search) i znalazłeś jego użycie w "PowerManagerService", zauważysz, że ustawiona jest flaga wskazująca tylko zarejestrowany-odbiornik. – CommonsWare

+1

+1 tylko do dyskusji kolorystycznej. – 323go

-1

Actullay ja faceing ten problem, ale ja go rozwiązać succeessfully

1) uruchomić usługę ze swojej głównej działalności

Intent i = new Intent(MainActivity.this, UpdateService.class); 
    startService(i); 

2) zarejestrować reciver w klasie usług.

@Override 
public void onCreate() { 
    super.onCreate(); 



    // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC 
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
    filter.addAction(Intent.ACTION_SCREEN_OFF); 
    BroadcastReceiver mReceiver = new ScreenReciever(); 
    registerReceiver(mReceiver, filter); 
} 

3) Gotowe

Powiązane problemy