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);
}
}
Merci, je l'ai eu pour travailler! –
Bienvenue. Toujours reconnaissant si les gens publient leur solution à la fin. Cela facilite les choses pour les autres aussi. –