2012-02-16 9 views
6

per favore come è il modo corretto di utilizzare broadcastReceiver di concerto con filtri Intent .. Nel mio file android_manifest.xml devo quelle linee:L'uso dei filtri intenti con broadcastReceivers Android

 <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> 

E dell'attività ho impostato il ricevitore con questa funzione

registerReceiver(broadcastReceiver, null); 

fallisce sul nulla, ovviamente incentrate ha bisogno della IntentFilter da impostare e posso aggiungere che in linea come param alla funzione, ma ho chiesto, come si usa con l'intento XML definito filtri..Grazie per il vostro aiuto

Teaser: Io in realtà ottenuto che funziona con l'intento set in linea, ma sto chiedendo come farlo lavorare con il set di intenti in XML ..

risposta

16

non avete bisogno di definire i intent-filtri in XML quando si sta utilizzando registerReceiver per ricevere le trasmissioni.

Nel tuo caso, dovresti creare una classe che si estenda a BroadcastReceiver e quindi definire quel file di classe nel file manifest di Android. per esempio:

file di classe:

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 
     } 
    } 
} 

e l'aggiunta in palese:

<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

Ottenuto .. Non ho avuto l'involucro del ricevitore nel mio xml .. :) Grazie – simekadam

5

È possibile registrare il proprio ricevitore e intent-filtri in manifest.xml come spiegato in precedenza o si può fare entrambe queste cose dinamicamente come:

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

dove myreceiver sarà la vostra classe ricevitore broadcast esteso. È possibile visualizzare l'esempio completo here.

Problemi correlati