web-dev-qa-db-fra.com

Android: impossible de démarrer l'intention du service: non trouvé?

Je sais, je ne suis pas le premier à être confronté à ce problème, mais j’ai essayé tellement de solutions que j’ai trouvé et que personne ne fonctionne ... peut-être pourriez-vous trouver l’erreur

L'erreur (également venue sans .class et avec /.Client en fonction d'autres paramètres)

12-02 16: 40: 15.359: W/ActivityManager (74): impossible de démarrer le service Intention {act = com.Android.fh.EnOceanApp.Client.class}: non trouvé

Dans le manifeste, cela est inclus dans l'application, hors activités (essayé aussi dans les activités et avec ".Client"

Le code dans onCreate ()

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

ou

 startService(new Intent(this.getApplicationContext(), Client.class));

ou

Intent intent=new Intent("com.Android.fh.EnOceanApp.Client.class");
    this.startService(intent);

ou

  Intent intent=new Intent("com.Android.fh.EnOceanApp.Client");
    this.startService(intent);

Et maintenant, je n'ai plus d'idée .... com.Android.fh.EnOceanApp est le package Client.Java la classe de service de ce package.

et le manifeste j'ai oublié:

  <application
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name" >
        <activity
            Android:label="@string/app_name"
            Android:name=".EnOceanAppActivity" >
            <intent-filter >
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>      
        </activity>

      <activity Android:name=".ListView" 
          Android:label="List View">
      </activity> 
      <activity Android:name=".GraphView" 
          Android:label="Graph View">
      </activity>
      <service 
            Android:name=".Client"></service> //with and without ., of course without this comment
    </application>
16
nico

Alors .. juste pour éventuellement aider les autres ou non:

J'ai créé un nouveau projet, copié les sources et essayé de l'exécuter: le service a été trouvé. Quelle était la différence, ou en d'autres termes: qu'est-ce qui, à mon avis, pourrait poser problème: le nom du paquet long ou le début avec com.Android.. . Dans le nouveau projet, je viens de choisir com.enocean

2
nico

Merci à l'utilisateur njzk2 de m'avoir laissé remarquer ce qui se passait.

J'ai eu le même problème. Il semble qu'Android OS ne puisse pas trouver la classe de service que vous avez demandée si vous ne vous êtes pas encore inscrit dans le fichier manifeste de votre projet.

Rappelez-vous qu'un service est comme une activité mais sans interface graphique. Cela signifie que les services doivent être enregistrés avant que vous puissiez les utiliser

Voici comment vous enregistrez le service dans votre projet Android:

<application>
    <!-- your code -->
    <activity>
        <!-- your code  -->
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service Android:name="com.your.own.service.class"></service>
</application>

N'oubliez pas que la classe YourService doit être étendue à partir du service, sinon votre classe ne sera pas un service.

public class YourService extends Service{}
21
AXSM

Parfois, vous aurez besoin de qualifier complètement le nom de votre classe dans le manifeste, plutôt que d'utiliser le shortform (.classname). Je l'ai constaté lorsque j'utilisais des classes d'un package différent, mais cela aiderait peut-être ici, étant donné que l'objectif du service peut sortir de l'application.

4
ProjectJourneyman

Malgré TOUTES les réponses de ce billet et de nombreuses autres réponses connexes Impossible de démarrer le service Intention: non trouvéImpossible de démarrer le service Intent , je me suis toujours battu et il m'a fallu un certain temps pour le mettre en marche. . Mon scénario était légèrement plus compliqué puisque j'essaie de démarrer un service dans une application différente de celle avec laquelle je l'appelle. Je l'ai compris et voici TOUS les détails, ainsi que du code bonus. 

MainActivity d'intention d'appel (ou où que ce soit)

Intent intent=new Intent("com.example.core.MusicService.1234");
//Or Intent intent=new Intent("com.example.core.MusicService.TOGGLE_PLAYBACK");
PendingIntent pendingIntent = PendingIntent.getService(this, 99, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Manifest: of Service (numéro de service dans le numéro de demande)

    <service Android:name="com.example.core.MusicService">
        <intent-filter>
            <action Android:name="com.example.core.MusicService1234"></action>
        </intent-filter>
        <intent-filter>
            <action Android:name="com.example.core.MusicService.TOGGLE_PLAYBACK"></action>
        </intent-filter>
    </service>

MusicService.Java

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if(intent != null){
        if(intent.getAction() != null){
            if(intent.getAction().contentEquals("com.example.core.MusicService.TOGGLE_PLAYBACK")){
                //Do work here
            }
        }
    }
}

Notes

  • Le service n'a PAS besoin d'être démarré, cette intention le lancera
  • "com.example.core.MusicService1234" et "com.example.core.MusicService.TOGGLE_PLAYBACK" peuvent être ce que vous voulez, mais doivent évidemment correspondre au filtre d'intention du manifeste de service avec l'intention d'appel. Vous pouvez en placer plusieurs pour que vous puissiez effectuer différentes actions lorsque votre service démarre en fonction de la valeur de votre intention.
  • 99 peut être ce que vous voulez, mais doit être unique si vous utilisez des notifications
  • Je ne suis pas sûr qu'il soit possible d'appeler un service dans une application différente (comme celle-ci) sans utiliser le filtre d'intention. Si c'est le cas, veuillez éclairer quelqu'un. J'ai essayé et ça ne marche pas.

Crédit à: les informations cumulatives de tous les messages :)

1
Kevin

Si quelqu'un voit cela et a le même problème que moi, c'est parce que j'ai suivi un guide et utilisé context.startService() au lieu de context.startActivity()

0
JamEngulfer

Eh bien, dans mon cas, j'ai dû nettoyer le projet. Cela se produit parfois lorsque vous avez créé une nouvelle classe Java pour le service dans votre package/projet mais que vous n'avez pas construit/nettoyé le projet après mot. Dans mon cas, il me suffisait de nettoyer le projet pour éliminer l'erreur.

0
kzs

C'est une erreur stupide d'Android

Cela ne fonctionnera pas

<service
            Android:name=".classname"/>

Mais cela fonctionnera, avoir une balise de fermeture séparée 

<service
            Android:name=".classname"></service>
0
arun-r

J'ai commis l'erreur stupide d'ajouter la balise à une autre dans le manifeste.

Dans ce cas, l'application actuelle n'a pas pu trouver le service défini.

J'espère que vous passerez cette erreur :)

Merci.

0
Otpidus