2011-03-29 13 views
9

Intento que funcione un receptor de difusión. Debe ser lo más simple posible, tengo mi manifiesta así:receptor de difusión Android no funciona

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mytest.intentRec" android:versionCode="1" 
    android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:debuggable="true"> 
     <activity android:name=".mainAct" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name="com.mytest.intentRec.MyIntentRec" 
        android:enabled="true" > 
     </receiver> 
    </application> 
    <uses-sdk android:minSdkVersion="7" /> 
</manifest> 

Como se puede ver que tengo una actividad mainAct, esto no hace más que enviar la emisión una vez iniciado:

public class mainAct extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     this.sendBroadcast(new Intent()); 
    } 
} 

y tengo un MyIntentRec clase, que es tan simple como se podría:

public class MyIntentRec extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.v("IntentRec", "got it"); 
    } 
} 

lo que espero es que cuando se inicia mi aplicación que una emisión se envía y se recogió y que una entrada de registro es writte norte. No veo esa entrada de registro y no veo ningún error. Sospecho que tiene un error en el manifiesto o en el envío de la transmisión. Acabo de crear un intento vacío allí, ¿tiene que ser algún intento con ciertas propiedades?

Respuesta

7

favor setClass para su Intención,

EX:

public class mainAct extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent i=new Intent("any string"); 
     i.setClass(this, MyIntentRec.class); 
     this.sendBroadcast(i); 
    } 
} 

Eso es lo que significa "La ausencia de cualquier filtro significa que puede ser invocada por los objetos Intención que especifican su nombre de clase exacta "

[Respuesta anterior]
Debe registrar qué tipo de acciones necesita en el manifiesto.
Ex:

<receiver android:name="com.mytest.intentRec.MyIntentRec" android:enabled="true" > 
     <intent-filter> 
      <action android:name="your.intent" /> 
     </intent-filter> 
    </receiver> 

enviarlo,

this.sendBroadcast(new Intent("your.intent")); 
+0

esto funciona bien. Pero como se publicó en el comentario anterior. No necesito un filtro de intención. ¿Cómo lo haría sin filtro de intención? – AndyAndroid

1

es insuficiente para hacer solo new Intent();. Tienes que especificarlo con alguna acción. Además, debe especificar en su manifiesto el filtro de intención para esta acción en particular. Por favor, lea más here y here.

+0

acuerdo con http://developer.android.com/guide/topics/manifest/receiver-element.html no necesita tener la intención filtros ver androide: exportado. – AndyAndroid

1

No definió ningún filtro de intenciones en el manifiesto de su BroadcastReceiver. Especifique uno para un tipo de acción personalizado. También debe definir este tipo de acción personalizado en la intención que difunde al iniciar.

+0

vea el comentario anterior para los filtros de intención. – AndyAndroid

+0

Si no desea usar filtros, debe dirigirse explícitamente al componente para el que desea enviar su Intent, en las propiedades de Intent. No haces eso en tu código. –

+0

tal vez no lo hice porque no sé cómo ... por cierto, todavía no sé ... – AndyAndroid

1

intente especificar qué acciones deben tomar su receptor en el manifiesto. Esto se puede hacer como tal:

<receiver android:name="com.mytest.intentRec.MyIntentRec"> 
    <intent-filter> 
     <action android:name="android.intent.action.MEDIA_BUTTON" /> 
    </intent-filter> 
</receiver> 
Cuestiones relacionadas