2010-11-27 3 views
6

Dans mon application, j'interroge la liste des services ayant une catégorie spécifique dans leurs filtres d'intention. Cela va très bien, je récupère une liste contenant des objets ResolveInfo. Dans ces ResolveInfos j'ai trouvé le champ "serviceInfo", qui est censé décrire les détails d'un service trouvé.Comment démarrer un service basé sur un objet ServiceInfo?

Maintenant comment puis-je construire un Intent à partir du serviceInfo, qui peut démarrer le service trouvé?

Mon code est maintenant comme ceci:

PackageManager pm = getApplicationContext().getPackageManager(); 
    Intent i = new Intent(); 
    i.setAction("<my custom action>"); 
    i.addCategory("<my custom category>"); 

    List<ResolveInfo> l = pm.queryIntentServices(i, 0); 

    gatherAgentNum = l.size(); 

    if(gatherAgentNum > 0){ 
    for(ResolveInfo info : l){ 
    Intent i2 = new Intent(this, info.serviceInfo.getClass()); 
    i2.putExtra(BaseAgent.KEY_RESULT_RECEIVER, new GatherResult(mHandler)); 
    startService(i2); 
    } 
    } 

C'est évidemment faux, le "info.serviceInfo.getClass()" retourne simplement la classe de l'objet ServiceInfo. Quelqu'un pourrait-il m'aider avec ça?

Merci

Edit: La solution (au moins celui que j'utilisé):

PackageManager pm = getApplicationContext().getPackageManager(); 
     Intent i = new Intent(); 
     i.setAction("<my action>"); 
     i.addCategory("<my category>"); 

     List<ResolveInfo> l = pm.queryIntentServices(i, 0); 

     if(l.size() > 0){ 
      for(ResolveInfo info : l){ 
       ServiceInfo servInfo = info.serviceInfo; 
       ComponentName name = new ComponentName(servInfo.applicationInfo.packageName, servInfo.name); 

       Intent i2 = new Intent(); 
       i2.setComponent(name); 

       startService(i2); 
      } 
     } 

Répondre

4

Avez-vous pris un coup d'oeil:

Je suppose que vous pouvez essayer de remplacer la classe getClass avec .packageName - et utiliser packageManager.getLaunchIntentForPackage(String)

Jetez aussi un coup d'œil à:

+0

Merci, je l'ai eu pour travailler! –

+1

Bienvenue. Toujours reconnaissant si les gens publient leur solution à la fin. Cela facilite les choses pour les autres aussi. –

Questions connexes