Service Intention doit être explicite: l'Intention
J'ai une application un certain temps maintenant, dans ce que j'appelle un service par l'intermédiaire d'un récepteur de radiodiffusion (MyStartupIntentReceiver). Le code du récepteur de radiodiffusion afin d'appeler le service est:
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.duk3r.eortologio2.MyService");
context.startService(serviceIntent);
}
Le problème est que dans Android 5.0 Lollipop j'obtiens l'erreur suivante (dans les versions précédentes d'Android, tout fonctionne ok):
Unable to start receiver com.duk3r.eortologio2.MyStartupIntentReceiver: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.duk3r.eortologio2.MyService }
Que dois-je changer pour que le service soit déclarée explicite et démarrer normalement? Essayé quelques réponses dans d'autres similaires fils, mais bien que je me suis débarrassé du message, le service ne peut pas démarrer.
- est-ce un service dans votre application?
- oui le package com.duk3r.eortologio2 est l'une de mes applications.
- Seulement un
<intent-filter>
sur un composant lorsque vous voulez apps de tiers de communiquer avec le composant. Vous semblez être tombée dans le piège de supposer que vous avez besoin d'un<intent-filter>
pour tout-en réalité, vous aurez rarement besoin d'un<intent-filter>
. ExpliciteIntent
est quand vous désigner le composant de parler dans leIntent
lui-même, généralement en utilisant le constructeur qui prend un JavaClass
objet que le deuxième paramètre. Que, plutôt qu'impliciteIntent
s et<intent-filter>
s sont ce que vous devriez utiliser pour les composants locaux pour votre application. - Double Possible de Android L API (21) - java.lang.IllegalArgumentException: Service d'Intention doit être explicite
Vous devez vous connecter pour publier un commentaire.
tout l'intention de vous rendre un service, une activité, etc. dans votre application, vous devez toujours suivre ce format
ou
implicite intentions (ce que vous avez dans votre code actuellement) sont considérés comme un risque pour la sécurité
bindService
?Définir votre
packageName
œuvres.Convertir l'intention implicite à l'explicite l'intention puis le feu de service de démarrage.
De l'essayer. il fonctionne pour moi. Ici MonitoringService est ma classe de service. J'ai deux action, qui indiquent service pour arrêter ou démarrer. J'ai envoyer la valeur de mon récepteur de radiodiffusion dépendent AIRPLANE_MODE_CHANGED.
REMARQUE: je ajouter le code suivant pour déclencher mon récepteur de radiodiffusion nommé: ManageLocationListenerReceiver.
Je l'amélioration de la réponse de Shahidul pour enlever le contexte de la dépendance:
À l'intérieur de la SuperApplication classe:
Dans votre manifeste:
Et puis, il suffit d'appeler: