2010-11-27 19 views
6

En mi aplicación, consulto la lista de servicios que tienen una Categoría específica en sus filtros de intención. Esto va bien, recupero una lista que contiene objetos ResolveInfo. En estos ResolveInfos encontré el campo "serviceInfo", que se supone que describe los detalles de un servicio encontrado.¿Cómo inicio un servicio basado en un objeto ServiceInfo?

Ahora, ¿cómo puedo construir un Intento desde el serviceInfo, que puede iniciar el servicio encontrado?

Mi código actual es la siguiente:

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); 
    } 
    } 

Esto es obviamente erróneo, el "info.serviceInfo.getClass()" sólo devuelve la clase del objeto ServiceInfo. ¿Podría alguien ayudarme con esto?

Gracias

Editar: La solución (al menos el que he usado):

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); 
      } 
     } 

Respuesta

4

¿Ha echado un vistazo a:

Creo que se puede tratar de sustituir la clase getClass con .packageName - y utilizar packageManager.getLaunchIntentForPackage(String)

También echa un vistazo a:

+0

Gracias, ¡lo hice funcionar! –

+1

Bienvenido. Siempre agradecido si las personas publican su solución al final. Lo hace más fácil para los demás también. –

Cuestiones relacionadas