2012-02-16 11 views
6

proszę jak to jest poprawny sposób używać broadcastReceiver w porozumieniu z filtrami intencyjne .. W moim pliku android_manifest.xml mam te linie:Korzystanie z filtrów intencyjny z broadcastReceivers Androida

 <activity android:name=".DataDisplayActivity" android:theme="@android:style/Theme.Holo.NoActionBar" android:icon="@drawable/icon_3d" android:label="AdvancedHyperXPositiveSuperFluousApp"> 
     <intent-filter> 
      <action android:name="com.simekadam.blindassistant.UPDATE_GPS_UI"/> 
      <action android:name="com.simekadam.blindassistant.UPDATE_CONTEXT_UI"/> 
     </intent-filter> 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     </activity> 

oraz w działalności Mam ustawiony odbiornik z tej funkcji

registerReceiver(broadcastReceiver, null); 

to nie na null, obvi potrzebuje IntentFilter być ustawione i mogę go dodać inline jako param do funkcji, ale pyta, jak go używać z XML zdefiniowane intencyjny filtry. Dziękuję za pomoc

Teaser: I rzeczywiście dostał pracę ze zbiorem inline intencji, ale pytam, jak zrobić to działa z zamiarem zestaw w formacie XML ..

Odpowiedz

16

nie musisz określić intent-filtrów w xml kiedy używasz registerReceiver do odbioru audycji.

W twoim przypadku powinieneś utworzyć klasę, która rozciąga się na BroadcastReceiver, a następnie zdefiniuj ten plik klasy w pliku manifestu androida. na przykład:

klasa pliku:

package your.package.name; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class MyCustomReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 

     if(action.equals("com.simekadam.blindassistant.UPDATE_GPS_UI")){ 
      //do something 
     } 
     else if(action.equals("com.simekadam.blindassistant.UPDATE_CONTEXT_UI")){ 
      //do something 
     } 
    } 
} 

i dodatek w manifeście:

<receiver android:name=".MyCustomReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="com.simekadam.blindassistant.UPDATE_GPS_UI" /> 
     <action android:name="com.simekadam.blindassistant.UPDATE_CONTEXT_UI" /> 
    </intent-filter> 
</receiver> 
+0

Mam to. Nie miałam opakowania odbiornika w moim xml ... :) Dziękuję – simekadam

5

Można zarejestrować odbiornik i intent-filtry w manifest.xml jak wyjaśniono powyżej, lub można zrobić obie te rzeczy dynamicznie:

Myreceiver reMyreceive = new Myreceiver(); 
IntentFilter filter = new IntentFilter("actionname"); 
registerReceiver(reMyreceive, filter); 

gdzie myreceiver będzie Twoją klasą rozszerzony odbiornik transmisji. Możesz zobaczyć pełny przykład here.