Test principal du BroadcastReceiver


Introduction à cette section

Dans cette section, nous allons apprendre le troisième des quatre composants majeurs d'Android : BroadcastReceiver (récepteur de diffusion), hehe, j'y pense tout à l'heure Comment écrire une phrase d'ouverture, j'ai donc feuilleté les deux livres de base sur Android que j'avais et j'ai découvert qu'aucun d'eux n'avait d'introduction à BroadcastReceiver. Je ne sais pas si c'est une coïncidence ou si l'auteur estime que ce truc ne sert pas à grand chose et qu'il n'y a pas lieu d'en parler ! Cependant, ils n'en parlent pas, mais Xiaozhu peut en parler, et il doit en parler en détail ! D'accord, commençons cette section ~ PS : D'ailleurs, sur le site officiel d'Android, j'ai cliqué sur API Guides -> App Components et n'ai trouvé aucune trace de BroadcastReceiver. Eh bien, recherchez simplement BroadcastReceiver. L'adresse du document correspondant est : BroadcastReceiver


1.

Réponse : Broadcast est une traduction littérale de Broadcast. Donnons un exemple frappant pour m'aider à comprendre BroadcastReceiver. N'oubliez pas d'étudier avant. A cette époque, chaque classe disposait d'un grand haut-parleur accroché au mur pour diffuser certaines annonces, comme par exemple lorsque l'école commençait à déplacer les livres, diffusait : "Dans chaque classe, trouvez quelques camarades de classe pour récupérer les livres du Bureau des Affaires Académiques." Une fois cette diffusion envoyée, tous les étudiants recevront cette notification de diffusion en même temps. Reçu, mais tous les élèves ne déplaceront pas les livres. Généralement, ceux qui déplacent les livres sont les « hommes forts » de la classe. Après la diffusion, il partira déplacer les livres mais !
——D'accord, ce qui précède est un exemple très frappant de diffusion :
Grand haut-parleur--> Envoyer la diffusion--> Tous les étudiants peuvent recevoir la diffusion--> Selon notre concept, BroadcastReceiver est en effet le haut-parleur global entre les applications, c'est-à-dire un moyen de communication. Le système lui-même enverra des émissions à plusieurs reprises, par exemple lorsque la batterie est faible ou suffisante, juste après le démarrage, le branchement d'un casque, le changement de méthode d'entrée, etc. Lorsque ces moments se produisent, le système enverra une diffusion. C'est ce qu'on appelle une diffusion système. Chaque application la recevra si vous souhaitez que votre application la reçoive. Effectuez certaines opérations pendant cette diffusion, telles que : une fois le système allumé, exécutez secrètement les services en arrière-plan ~ Haha, à ce moment-là, il vous suffit de Enregistrez un BroadcastReceiver pour surveiller le démarrage Lorsque vous recevez la diffusion de démarrage, faites des choses sournoises ~. Bien sûr, nous pouvons également envoyer des diffusions nous-mêmes. Par exemple, après avoir reçu des informations push du serveur, l'utilisateur se connecte ailleurs, puis il doit être obligé de se déconnecter et de revenir sur place. Interface de connexion et invite à se connecter ailleurs ~ Bien sûr, j'écrirai un exemple simple plus tard pour aider tout le monde à comprendre les avantages que la diffusion nous apporte ~


2. Deux types de diffusion :

1.png


3. Recevoir les diffusions du système

1) Deux façons d'enregistrer les diffusions

Comme mentionné précédemment, le système enverra les diffusions du système correspondantes à certains moments, laissez-nous notre application reçoit la diffusion du système, Avant de recevoir, nous devons enregistrer un récepteur de diffusion pour notre APP ! Les méthodes d'enregistrement sont divisées en deux types suivants : dynamique et statique !

2.png

3.png

Ci-dessous, nous démontrons l'utilisation et les différences des deux via le code :

2) Inscription dynamique instance (surveillance des changements d'état du réseau)

Exemple de code :

Rendu :

4.gif

D'accord, il n'y a pas de connexion Internet au début, c'est-à-dire que le wifi n'est pas activé Au bout d'un moment, l'invite Toast apparaît~. C’est aussi facile à mettre en œuvre !

Implémentation du code :

Personnalisez un BroadcastReceiver et complétez les transactions à diffuser dans la méthode onReceive(), comme les informations Toast ici : MyBRReceiver.java

classe publique MyBRReceiver étend BroadcastReceiver{
@Override
public void onReceive(Contexte contextuel, intention d'intention) {
Toast.makeText(contexte,"L'état du réseau s'est produit Changer~",Toast.LENGTH_SHORT).show();
}
}

MainActivity.java Enregistrez dynamiquement la diffusion :

classe publique MainActivity extends AppCompatActivity {

MyBRReceiver myReceiver;

@Override
protected void onCreate(Bundle savingInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Code principal :
myReceiver = new MyBRReceiver() ;
IntentFilter itFilter = new IntentFilter();
itFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(myReceiver, itFilter);
}

// N'oubliez pas d'annuler la diffusion~
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
}

L'enregistrement dynamique est simple~ mais un inconvénient de l'enregistrement dynamique est qu'il nécessite le démarrage du programme avant que nous puissions recevoir la diffusion si nous avons besoin d'un programme. S'il n'est pas démarré, mais que vous pouvez toujours recevoir des diffusions, alors vous devez enregistrer les diffusions statiques !


3) Instance d'enregistrement statique (réception de la diffusion de démarrage)

Exemple de code :

Il n'y a pas de schéma ici~, Regardons directement l'implémentation du code ~

Implémentation du code :

1 Personnalisez un BroadcastReceiver et réécrivez onReceive pour terminer le traitement de la transaction.

classe publique BootCompleteReceiver extends BroadcastReceiver {
chaîne finale privée ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive (contexte contextuel, intention d'intention ) {
if (ACTION_BOOT.equals(intent.getAction()))
Toast.makeText(context, "Boot terminé~", Toast.LENGTH_LONG).show();
}
}

2. Enregistrez le BroadcastReceiver dans AndroidManifest.xml et ajoutez le filtre d'intention pour la diffusion de démarrage

Au fait, n'oubliez pas d'ajouter Android ! autorisation .RECEIVE_BOOT_COMPLETED autorisation !

<récepteur android:name=".BootCompleteReceiver">
<intent-filter>
<action android:name = "android.intent.cation .BOOT_COMPLETED">
</intent-filter>
</receiver>

<!-- Autorisations -->
<uses-permission android:name ="android.permission.RECEIVE_BOOT_COMPLETED"/>

D'accord, lorsque vous redémarrerez votre téléphone, vous constaterez qu'après un certain temps, le toast de fin de démarrage apparaîtra~ De plus, les versions Android 4.3 et supérieures permettent d'installer des programmes sur des cartes SD si votre programme est installé sur SD. , vous ne recevrez pas la diffusion de démarrage. Les raisons spécifiques et les solutions seront expliquées en détail dans la section suivante !


4) Précautions d'utilisation de la diffusion :

Hé, la diffusion est facile à utiliser et simple, mais vous devez faire attention à l'utilisation de la diffusion :

N'ajoutez pas trop de logique et n'effectuez pas d'opérations fastidieuses en diffusion, car les threads ne sont pas autorisés à être ouverts en diffusion. Lorsque la méthode onReceiver() s'exécute pendant une longue période (plus de 10 secondes) et n'est pas terminée, le programme signalera une erreur (ANR). La diffusion joue plus souvent le rôle d'ouverture d'autres composants, tels que le démarrage d'un service, les invites de notification, Activité et ainsi de suite !


4. Envoi de diffusions

Eh bien, surtout, nous recevons tous des diffusions du système. Le système envoie et nous ne pouvons pas être aussi passifs. tout le temps, nous devons être proactifs. En plus, demain c'est la Saint Valentin chinoise, programmeurs, profitez-en et essayez de vous sortir des célibataires, haha ​​! Bon, revenons à la diffusion, nous prendrons l'initiative de la diffuser nous-mêmes ! Voyons comment y parvenir !

Comment envoyer : Avant d'envoyer une diffusion, vous devez d'abord définir un destinataire, déterminer d'abord la cible, puis avouer ! ~(Quantity'◡'gree)~

5.png

Exemple de code : (diffusion standard)

MyBroadcastReceiver.java

classe publique MyBroadcastReceiver extends BroadcastReceiver {
chaîne finale privée ACTION_BOOT = "com.example.broadcasttest.MY_BROADCAST";
@Override
public void onReceive (contexte contextuel, Intention d'intention) {
if(ACTION_BOOT.equals(intent.getAction()))
Toast.makeText(context, "J'ai eu la confession~",Toast.LENGTH_SHORT).show();
}
}

Ensuite, enregistrez-le dans AndroidManifest.xml et écrivez Intent-filter :

<receiver android:name=" . MyBroadcastReceiver">
  <intent-filter>
  <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
  </intent-filter>
< ; /récepteur>

D'accord, ensuite nous exécutons le projet de programme ci-dessus, puis nous le fermons, puis nous créons un nouveau projet, Terminez l'envoi de diffusion dans ce projet ~ Créez une nouvelle Demo2, la mise en page est un simple bouton, puis terminez l'envoi de diffusion dans MainActivity :

MainActivity.java :

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savingInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ main);
Bouton btn_send = (Button) findViewById(R.id.btn_send);
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendBroadcast(new Intent( "com.example.broadcasttest.MY_BROADCAST"));
                                                                                                      ; 🎜>


Résumé de ce section :

D'accord, l'utilisation simple de BroadcastReceiver est aussi simple que cela. Cependant, ce que nous utilisons ici, ce sont des diffusions mondiales, c'est-à-dire d'autres L'application peut également recevoir notre diffusion, ce qui peut entraîner des problèmes de sécurité, mais ce n'est pas grave. Nous vous apprendrons comment l'utiliser dans la section suivante. Diffusion locale, et comment installer l'application sur la carte SD après Android 4.3, comment surveiller le démarrage~Bon, c'est tout pour cette rubrique, merci~6.gif