159 votes

Enregistrer par programme un récepteur de radiodiffusion

Je voudrais savoir quelle est la meilleure pratique/voies d’enregistrer par programmation un récepteur de radiodiffusion. Je veux m’inscrire à des récepteurs spécifiques selon le choix de l’utilisateur.

Comme l’inscription se fait via le fichier de manifeste, je me demandais si il y a une bonne façon d’y parvenir dans le code.

276voto

Eric Nordvik Points 6975

Dans votre `` méthode, vous pouvez enregistrer un récepteur comme ceci :

N’oubliez pas de l’exécuter la `` méthode :

71voto

Krypton Points 1578

Un point important que les gens oublient de mentionner, c'est la durée de vie de l' Broadcast Receiver. La différence de par programme l'enregistrement de l'inscription dans AndroidManifest.xml c'est que cette dernière ne dépend pas demande temps de la vie, tandis que le premier ne. Cela signifie que si vous vous inscrivez dans AndroidManifest.xml, vous pouvez prendre l'diffusé intentions, même si votre application n'est pas en cours d'exécution.

Edit: le parlé de La note n'est plus vrai que de Android 3.1, le système Android exclut tous les récepteur de recevoir les intentions par défaut si l'application correspondante n'a jamais été lancé par l'utilisateur ou si le consentement explicite de l'utilisateur arrêté à l'application via le menu Android (dans Gérer → Application).

C'est une caractéristique de sécurité supplémentaire, que l'utilisateur peut être sûr que les demandes qu'il a commencé recevrez diffusion intentions. Cité de http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html

De sorte qu'il peut être compris comme des récepteurs par programme enregistré en Application de l' onCreate() aurait le même effet avec ceux déclarés dans AndroidManifest.xml à partir d'Android 3.1 ci-dessus.

68voto

hackbod Points 55292

Il semble que vous voulez contrôler si les composants publié dans le manifeste sont actifs, ne pas inscrire de manière dynamique un récepteur (à partir du Contexte.registerReceiver()) lors de l'exécution.

Si oui, vous pouvez utiliser PackageManager.setComponentEnabledSetting() pour contrôler si ces composants sont actifs:

http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)

Remarque si vous êtes uniquement intéressé par la réception d'une émission pendant que vous êtes en cours d'exécution, il est préférable d'utiliser registerReceiver(). Un composant récepteur est principalement utile lorsque vous devez vous assurer que votre application est lancée à chaque fois que l'émission est envoyé.

42voto

SohailAziz Points 1873

4voto

Sunil Pandey Points 332
package com.example.broadcastreceiver;


import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

   UserDefinedBroadcastReceiver broadCastReceiver = new UserDefinedBroadcastReceiver();

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }

   /**
    * This method enables the Broadcast receiver for
    * "android.intent.action.TIME_TICK" intent. This intent get
    * broadcasted every minute.
    *
    * @param view
    */
   public void registerBroadcastReceiver(View view) {

      this.registerReceiver(broadCastReceiver, new IntentFilter(
            "android.intent.action.TIME_TICK"));
      Toast.makeText(this, "Registered broadcast receiver", Toast.LENGTH_SHORT)
            .show();
   }

   /**
    * This method disables the Broadcast receiver
    *
    * @param view
    */
   public void unregisterBroadcastReceiver(View view) {

      this.unregisterReceiver(broadCastReceiver);

      Toast.makeText(this, "unregistered broadcst receiver", Toast.LENGTH_SHORT)
            .show();
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X