2010-12-12 3 views
2

Voici un destinataire de diffusion.Envoi d'une intention du récepteur de diffusion vers un service en cours d'exécution dans Android

public class SmsReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context ctx, Intent intent) { 
      Log.d(DEBUG_TAG, SmsReceiver.class.getSimpleName()+ " action: " + intent.getAction()); 
      // here is codes for sending intent to my running service 

    } } 

voici les noeuds du récepteur et du service de diffusion dans mon fichier xml manifeste. Comment puis-je envoyer l'intention du récepteur de diffusion à mon service en cours d'exécution? merci d'avance.

Répondre

10

Idéalement, vous n'avez pas de service en cours d'exécution. Les services ne devraient être en mémoire que lorsqu'ils font quelque chose, et il est fort probable que votre code ne fasse rien quand un SMS arrive. Cela étant dit, votre récepteur peut appeler le startService(). Cela passe un Intent au onStartCommand() du service, qu'il soit déjà en cours d'exécution ou non. Idéalement, votre service est un IntentService, un service conçu pour fonctionner avec le modèle de commande et pour s'éteindre une fois le traitement d'une commande terminé. De plus, puisque les messages SMS peuvent arriver pendant que l'appareil est en veille, vous devrez probablement utiliser un WakeLock pour vous assurer que l'appareil reste éveillé suffisamment longtemps pour que le contrôle passe au service et que le service fasse ce qu'il veut. fait. Une approche pour cela est d'utiliser mon WakefulIntentService, ce qui termine le modèle IntentService + WakeLock.

Questions connexes