Как запустить сервис на основе объекта ServiceInfo? - PullRequest
6 голосов
/ 27 ноября 2010

В моем приложении я запрашиваю список служб, которые имеют определенную категорию в своих фильтрах намерений. Все идет хорошо, я получаю список, содержащий объекты 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);
            }
        }

1 Ответ

4 голосов
/ 27 ноября 2010

Вы смотрели на:

Iдумаю, вы можете попытаться заменить класс getClass на .packageName - и использовать packageManager.getLaunchIntentForPackage(String)

Также взгляните на:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...