2012-12-19 4 views
0

J'ai besoin de créer un BroadcastReceiver qui effectue certaines tâches immédiatement chaque fois que le périphérique démarre. En outre, quand un certain bouton est cliqué, le récepteur devrait arrêter de démarrer au démarrage. Quelqu'un peut-il m'aider à gérer cela?android enregistrer un récepteur de diffusion permanente

+0

Qu'avez-vous essayé? Il y a beaucoup de questions à ce sujet, par exemple: http://stackoverflow.com/questions/2784441/trying-to-start-a-service-on-boot-on-android – qzikl

+0

problème est d'arrêter BroadcastReceiver quand un certain bouton est cliqué . ce bouton certain est dans votre application ou tout autre? –

+0

mon application seulement. Merci les gars, la solution de Ralgha semble fonctionner – Droidman

Répondre

3

Tout ce que vous devez résoudre la première partie de votre question est de faire un BroadcastReceiver pour et le déclarer dans votre manifeste comme:

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

Le QUICKBOOT_POWERON est nécessaire pour certains appareils qui ne l'envoie pas BOOT_COMPLETED diffusion. Les appareils HTC aiment utiliser le quickboot à la place.

Pour la deuxième partie de votre question, il y a plusieurs façons d'y parvenir. Vous pouvez simplement définir une valeur dans SharedPreferences que votre récepteur vérifie chaque fois qu'il se déclenche et quitter immédiatement si la valeur l'exige.

Vous pouvez également désactiver le récepteur dans le code:

getPackageManager().setComponentEnabledSetting( 
    new ComponentName(this, MyBootReceiver.class), 
     PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
     PackageManager.DONT_KILL_APP); 

Vous pouvez l'activer en utilisant la même méthode:

getPackageManager().setComponentEnabledSetting( 
    new ComponentName(this, MyBootReceiver.class), 
     PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
     PackageManager.DONT_KILL_APP); 

Je ne suis pas sûr de la persistance de cette méthode. Je l'utilise dans l'une de mes applications, mais ce n'est pas pour un récepteur de démarrage, et il n'a pas à persister à travers les bottes. Vous devrez l'expérimenter si vous voulez suivre cette route.

+0

merci, je vais l'essayer! – Droidman

Questions connexes