2012-02-16 14 views
6

favor cómo es la forma correcta de utilizar BroadcastReceiver en concierto con filtros Intención .. En mi archivo android_manifest.xml que tienen esas líneas:El uso de filtros intención 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> 

Y en la actividad puse el receptor con esta función

registerReceiver(broadcastReceiver, null); 

se produce un error en la nula, obvi que necesita el IntentFilter a ajustar y puedo agregarlo en línea como parámetro a la función, pero preguntando, cómo usarlo con XML definido intención filtros .. Gracias por su ayuda

Teaser: En realidad tengo trabajo con la intención de conjunto en línea, pero estoy preguntando cómo hacer que funcione con el conjunto de intenciones en XML ..

Respuesta

16

usted no necesita definir intención de filtros en su XML cuando está utilizando registerReceiver para recibir transmisiones.

En su caso, debe crear una clase que se extienda a BroadcastReceiver y luego definir ese archivo de clase en el archivo de manifiesto de su Android. por ejemplo:

archivo de clase:

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

y además en el manifiesto:

<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

Entendido ... No he tenido el envoltorio del receptor en mi xml .. :) Gracias – simekadam

5

Usted puede registrar su receptor y por intención de filtros en manifest.xml como se explicó anteriormente o se puede hacer ambas cosas dinámicamente como:

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

donde myreceiver será su clase receptor de difusión extendida. Puede ver el ejemplo completo here.

Cuestiones relacionadas