В моем приложении я запрашиваю список служб, которые имеют определенную категорию в своих фильтрах намерений. Все идет хорошо, я получаю список, содержащий объекты ResolveInfo. В этих ResolveInfos я обнаружил поле «serviceInfo», которое должно описывать детали найденного сервиса.
Теперь, как мне создать Intent из serviceInfo, который может запустить найденный сервис?
Мой код теперь такой:
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);
}
}
Это, очевидно, неправильно, "info.serviceInfo.getClass ()" просто возвращает класс объекта serviceInfo. Может ли кто-нибудь помочь мне с этим?
Спасибо
Редактировать: Решение (по крайней мере, то, которое я использовал):
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);
}
}