start - Android: ¿Cómo activar un receptor Broadcast para llamar a su método onReceive()?
intent broadcast android (4)
He programado alarma para mi aplicación.
He implementado un receptor de difusión que se activará una vez que llegue la hora de la alarma.
Cómo llamar manualmente al receptor de difusión para ejecutar el código dentro del método onReceive sin replicar el código dos veces.
Pensé en tener el código en la utilidad singleton call y llamar a ese método al tener una instancia de clase util desde cualquier lugar.
Pero es que es otra forma de llamar a ese método onReceive directamente o, si no, de la intención de transmisión problemática.
android: export = "falso" // Parámetro adicional del receptor al definir en el archivo de manifiesto.
Otra pregunta es qué significa ese parámetro exportado. Por favor ayúdame a entender esto.
Cómo llamar manualmente al receptor de difusión para ejecutar el código dentro del método onReceive sin replicar el código dos veces.
Fire BroadcastReceiver
utilizando la misma acción de sendBroadcast
que se agregó en AndroidManifest.xml
:
Intent intent=new Intent(CUSTOM_ACTION_STRING);
// Add data in Intent using intent.putExtra if any required to pass
sendBroadcast(intent);
¿Qué es ese androide: significa parámetro exportado?
Como en android:exported doc: si el receptor de difusión puede recibir mensajes de fuentes externas a su aplicación: "verdadero" si puede, y "falso" si no
Significa si:
Android: exportado = verdadero: otra aplicación también puede disparar este receptor de difusión usando acción
Android: exportado = falso: otra aplicación no puede disparar este receptor de difusión usando acción
Aquí hay una solución más segura para el tipo:
AndroidManifest.xml
:<receiver android:name=".CustomBroadcastReceiver" />
CustomBroadcastReceiver.java
public class CustomBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // do work } }
*.java
Intent i = new Intent(context, CustomBroadcastReceiver.class); context.sendBroadcast(i);
Debe mencionar la action
que debe ser filtrada por el sistema operativo Android para notificarle. es decir: dentro del archivo de manifiesto,
<receiver
android:name="com.example.MyReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="com.example.alarm.notifier" />//this should be unique string as action
</intent-filter>
y
cuando quiera llamar al método onReceive del receptor de broadcast,
Intent intent = new Intent();
intent.setAction("com.example.alarm.notifier");
sendBroadcast(intent);
1. La forma de iniciar un BroadcastReceiver
manualmente es llamando
Intent intent = new Intent("com.myapp.mycustomaction");
sendBroadcast(intent);
donde "com.myapp.mycustomaction"
es la acción especificada para su BroadcastReceiver
en el manifiesto. Esto se puede llamar desde una Activity
o un Service
.
2. Se sabe que Android permite que las aplicaciones utilicen componentes de otras aplicaciones. De esta manera, las aplicaciones externas, siempre que el atributo android:exported = true
se establezca en el manifiesto, pueden iniciarse las Activity
s, Service
s, BroadcastReceiver
y ContentProvider
s de mi aplicación. Si se establece en android:exported = false
, este componente no puede iniciarlo una aplicación externa. Ver here