2011-06-29 14 views
10

Proste pytanie - czy mogę zarejestrować pojedyncze urządzenie BroadcastReceiver w wielu akcjach intencyjnych? Oto co mam rozważa:Odbiornik Android dla wielu akcji?

<receiver android:name=".myReceiver"> 
    <intent-filter android:priority="1000000"> 
     <action android:name="android.intent.action.MEDIA_BUTTON" /> 
     <action android:name="android.intent.action.ACTION_HEADSET_PLUG" /> 
    </intent-filter> 
</receiver> 

Więc w myReceiver klasa onReceive, mogłem sprawdzić intent.getAction() zarówno ACTION_MEDIA_BUTTON and ACTION_HEADSET_PLUG?

Dzięki.

Odpowiedz

24

Domyślam się, że możesz mieć wiele różnych elementów, z których każdy ma swój element akcji.

<receiver android:name=".myReceiver"> 
    <intent-filter android:priority="1000000"> 
     <action android:name="android.intent.action.ACTION_HEADSET_PLUG" /> 
    </intent-filter> 

    <intent-filter android:priority="1000000"> 
     <action android:name="android.intent.action.MEDIA_BUTTON" /> 
    </intent-filter> 
</receiver> 

A następnie sprawdź działanie intencji w onReceive odbiornika.

+9

W rzeczywistości filtr intencji może mieć wiele działań: http://developer.android.com/guide/topics/intents/ intents-filters.html # ifs – advantej

+3

Dokumentacja mówi, że 'Komponent aplikacji powinien zadeklarować osobne filtry dla każdego unikatowego zadania, które może wykonać. Pozwoli to na uzyskanie drobniejszych szczegółów dla różnych akcji. –

5

Tak, jeden BroadcastReceiver może odbierać zamiary z kilkoma działaniami. Twój przykład jest ważny. Możesz mieć wiele "działań" w jednym filtrze. Ponadto, w tym przypadku jest to więcej niż bardziej niż to, co wydaje się bezpieczniejsze: tworzenie kilku filtrów za pomocą pojedynczego działania (zgodnie z propozycją w odpowiedzi przez @advantej). Posiadanie kilku akcji w filtrze wyraźnie informuje, że oczekujesz jednej z kilku akcji (logicznych "lub").

Te słowa z „Intent and Intent filters” wyjaśnić wybór między jednym vs. wielu intencyjny filtrów dla bardziej złożonych przypadkach:

To dobrze utworzyć filtr, który zawiera więcej niż jedną instancję < działania >, <danych> lub <kategoria>. Jeśli tak, po prostu musisz być pewien, że komponent może obsłużyć dowolne i wszystkie kombinacje tych elementów filtrów.

Jeśli chcesz obsługiwać wiele rodzajów intencji, ale tylko w określonych kombinacjach akcji, danych i kategorii kategorii, musisz utworzyć wiele filtrów zamiany.

proszę zobaczyć różne przykłady intencyjny Filtry tutaj: AndroidManifest.xml

2

Tak, można mieć wiele działań na rzecz tego samego BroadcastReceiver. Rzeczywiście, to, co zrobiłeś, jest poprawne:

<receiver android:name=".myReceiver"> 
    <intent-filter android:priority="1000000"> 
     <action android:name="android.intent.action.ACTION_HEADSET_PLUG"/> 
     <action android:name="android.intent.action.MEDIA_BUTTON" /> 
    </intent-filter> 
</receiver> 

Już użyłem tego podejścia w projekcie i zadziałało.

0

o priorytecie ustawić:

https://developer.android.com/guide/topics/manifest/intent-filter-element.html

android: priorytet Priorytetem że należy zwrócić się do składnika dominującego w odniesieniu do obsługi zamiary typu opisanego przez filtr.Ten atrybut ma znaczenie zarówno dla działań, jak i odbiorników telewizyjnych:

Zawiera informacje o tym, w jaki sposób aktywność może odpowiadać zamiarowi, który pasuje do filtru, w stosunku do innych działań, które mogą również odpowiadać intencjom. Kiedy intencją może się zająć wiele działań o różnych priorytetach, Android potraktuje tylko te z wyższymi priorytetami jako potencjalnymi celami dla intencji.

Kontroluje kolejność, w jakiej odbierane są odbiorniki, aby odbierać wiadomości rozgłoszeniowe. Osoby o wyższym priorytecie są wywoływane przed tymi o niższych wartościach. (Kolejność dotyczy tylko wiadomości synchronicznych; jest ignorowana w przypadku wiadomości asynchronicznych.)

Tego atrybutu należy używać, jeśli naprawdę trzeba narzucić konkretną kolejność, w której odbierane są transmisje, lub chcesz wymusić na Androidzie jedno działanie ponad inni.

Wartość musi być liczbą całkowitą, na przykład "100". Wyższe liczby mają wyższy priorytet niż . Wartość domyślna to 0. Wartość musi być większa: niż -1000 i mniej niż 1000.

Powiązane problemy