J'ai programmé une alarme pour mon application.
J'ai implémenté le récepteur de diffusion pour qu'il se déclenche une fois l'heure de l'alarme atteinte.
Comment appeler manuellement le récepteur de diffusion pour exécuter le code à l'intérieur de la méthode onReceive sans répliquer le code deux fois.
J'ai pensé à avoir le code dans l'appel singleton utilitaire et appeler cette méthode en ayant une instance de classe util de n'importe où.
Mais est-ce une autre façon d'appeler cette méthode onReceive directement ou bien de diffuser l'intention de manière problématique.
Android: exports = "false" // Paramètre supplémentaire du récepteur lors de la définition dans le fichier manifeste.
Une autre question est de savoir ce que signifie ce paramètre exporté. S'il vous plaît, aidez-moi à comprendre cela.
1. La façon de lancer un BroadcastReceiver
manuellement est en appelant
Intent intent = new Intent("com.myapp.mycustomaction");
sendBroadcast(intent);
où "com.myapp.mycustomaction"
est l'action spécifiée pour votre BroadcastReceiver
dans le manifeste. Cela peut être appelé à partir d'un Activity
ou d'un Service
.
2. Il est connu que Android permet aux applications d'utiliser des composants d'autres applications. De cette façon, Activity
s, Service
s, BroadcastReceiver
s et ContentProvider
s de mon application peuvent être démarrés par des applications externes, à condition que l'attribut Android:exported = true
est défini dans le manifeste. S'il est défini sur Android:exported = false
, ce composant ne peut pas être démarré par une application externe. Voir ici .
Vous devez mentionner le action
qui doit être filtré par Android OS pour vous avertir. Par exemple: à l'intérieur du fichier manifeste,
<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>
et
chaque fois que vous souhaitez appeler la méthode onReceive du récepteur de diffusion,
Intent intent = new Intent();
intent.setAction("com.example.alarm.notifier");
sendBroadcast(intent);
Voici une solution plus sécurisée:
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);
Comment appeler manuellement le récepteur de diffusion pour exécuter le code à l'intérieur de la méthode onReceive sans répliquer le code deux fois.
Fire BroadcastReceiver
utilisant sendBroadcast
même action que celle ajoutée dans AndroidManifest.xml
:
Intent intent=new Intent(CUSTOM_ACTION_STRING);
// Add data in Intent using intent.putExtra if any required to pass
sendBroadcast(intent);
qu'est-ce que Android: paramètre exporté signifie
Comme dans Android: exporté doc: Indique si le récepteur de diffusion peut ou non recevoir des messages de sources extérieures à son application - "vrai" s'il le peut et "faux" sinon
Signifie si:
Android: exporté = true: autre application également capable de déclencher ce récepteur de diffusion en utilisant l'action
Android: exporté = false: autre application ne pouvant pas déclencher ce récepteur de diffusion à l'aide d'une action