web-dev-qa-db-fra.com

Android - Comment déclencher un récepteur de diffusion pour appeler sa méthode onReceive ()?

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.

17
M Vignesh

1. La façon de lancer un BroadcastReceiver manuellement est en appelant

Intent intent = new Intent("com.myapp.mycustomaction");
sendBroadcast(intent);

"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, Activitys, Services, BroadcastReceivers et ContentProviders 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 .

26
Y.S

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);
7
Mehul Joisar

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);
    
6
Eric

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

2
ρяσѕρєя K