2010-08-12 3 views

Répondre

0

En fait, il y a:

Votre récepteur de démarrage:

public class BootstrapReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context cntxt, Intent intent) { 
     String action = intent.getAction(); 

     if(Intent.ACTION_BOOT_COMPLETED.equals(action)) { 
      // do your thing 
     }  
    } 
} 

Ajouter un récepteur et une autorisation pour receiv ing événements de démarrage:

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

    <receiver android:name=".BootstrapReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
    </receiver> 

Via l'application (Utilisez cette option si vous voulez ajouter programatically/retirer le récepteur de démarrage et non par AndroidManifest.xml. Mais rappelez-vous, vous devrez toujours déclarer l'autorisation de démarrage dans votre AndroidManifest.xml)

Context ctx = getContext(); 
    BootstrapReceiver booter = new BootstrapReceiver(); 
    IntentFilter filter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); 
    ctx.registerReceiver(booter, filter); 

Désenregistrer:

ctx.unregisterReceiver(booter); 
+1

Votre deuxième partie ne fonctionne pas. Par définition, BOOT_COMPLETED n'est envoyé que lorsque le système démarre ... avant que votre application ne soit lancée ... il n'est donc pas possible d'appeler registerReceiver() pour le signaler au destinataire avant l'envoi de la diffusion. – hackbod

+0

@hackbod C'est assez évident à mentionner ici, ça ne marchera que sur le prochain démarrage – naikus

+1

Non, ça ne marchera pas. RegisterReceiver() ne dure que la durée de vie du processus. C'est pourquoi il n'est pas nécessaire d'avoir BootstrapReceiver dans votre manifeste - ceci configure juste un rappel direct à l'instance de Receiver que vous fournissez. Une fois l'instance disparue (lorsque votre processus disparaît), l'enregistrement est parti. – hackbod

1

La meilleure façon de le faire est l'utilisation PackageManager.setComponentEnabledSetting(): http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)

Il vous suffit donc de décider si vous voulez que votre réception soit activée ou non par défaut en activant android: enabled dans le manifeste. Utilisez ensuite cette API pour activer ou désactiver explicitement le composant lors de l'exécution, selon vos besoins. Si le composant est désactivé, il ne sera pas disponible au démarrage et ne recevra donc pas la diffusion.

Questions connexes