Démarrage du service à partir de BroadcastReceiver

J’ai un Service et BroadcastReceiver dans mon application, mais comment puis-je lancer le service directement à partir de BroadcastReceiver ? En utilisant

 startService(new Intent(this, MyService.class)); 

ne fonctionne pas dans un BroadcastReceiver , des idées?

MODIFIER:

context.startService (..);

fonctionne, j’ai oublié la partie contextuelle

N’oublie pas

context.startService(..);

devrait être comme ça:

 Intent i = new Intent(context, YourServiceName.class); context.startService(i); 

assurez-vous d’append le service à manifest.xml

Utilisez le context de la méthode onReceive de votre BroadcastReceiver pour démarrer votre composant de service.

 @Override public void onReceive(Context context, Intent intent) { Intent serviceIntent = new Intent(context, YourService.class); context.startService(serviceIntent); } 

Meilleur entrainement :

Lors de la création d’une intention, en particulier à partir de BroadcastReceiver , ne prenez pas cela comme contexte. Prenez context.getApplicationContext() comme ci-dessous

  Intent intent = new Intent(context.getApplicationContext(), classNAME); context.getApplicationContext().startService(intent); 

Comme la méthode onReceive (Context, Intent) d’un récepteur s’exécute sur le thread principal, elle doit s’exécuter et retourner rapidement. Si vous devez effectuer un long travail, soyez prudent lorsque vous lancez des threads ou démarrez des services d’arrière-plan, car le système peut tuer tout le processus après le retour d’onReceive (). Pour plus d’informations, voir Effet sur l’état du processus Pour effectuer un travail de longue durée, nous vous recommandons:

Appeler goAsync () dans la méthode onReceive () de votre récepteur et passer le BroadcastReceiver.PendingResult à un thread d’arrière-plan. Cela maintient la diffusion active après le retour de onReceive (). Cependant, même avec cette approche, le système s’attend à ce que vous terminiez l’émission très rapidement (moins de 10 secondes). Cela vous permet de déplacer le travail vers un autre thread pour éviter de surcharger le thread principal. Planification d’un travail avec JobScheduler developer.android.com