2011-11-15 9 views
9

Estoy tratando de obtener una lista de receptores que manejan android.intent.action.BOOT_COMPLETED para otras aplicaciones.Obtener filtro de intención para receptores

puedo obtener sólo las aplicaciones con esa acción con esto:

final PackageManager pm = getPackageManager(); 
final Intent intent = new Intent("android.intent.action.BOOT_COMPLETED"); 
final List<ResolveInfo> activities = pm.queryBroadcastReceivers(intent, 0); 
for (ResolveInfo ri : activities) { 
    Log.i(TAG, "app name: " + ri.loadLabel(pm)); 
} 

puedo conseguir una lista de receptores con este código:

final List<PackageInfo> packs = pm.getInstalledPackages(PackageManager.GET_RECEIVERS); 
for (final PackageInfo p : packs) { 
    ActivityInfo[] receivers = p.receivers; 
    if (receivers != null) { 
     for (ActivityInfo ai : receivers) { 
      Log.i(TAG, "receiver: " + ai.name); 
     } 
    }     
} 

Después de obtener los receptores no puedo decir lo el intento-filtro/acción es. Si una aplicación tiene dos receptores, necesito saber cuál maneja android.intent.action.BOOT_COMPLETED. ¿Hay alguna manera de que pueda obtener esta información?

+1

Ok, creo que lo descubrí. final PackageManager pm = getPackageManager(); final Intent intent = new Intent ("android.intent.action.BOOT_COMPLETED"); final List activities = pm.queryBroadcastReceivers (intento, 0); for (ResolveInfo ri: activities) { Log.i (TAG, "nombre de la aplicación:" + ri.loadLabel (pm)); // Lo que necesitaba: ActivityInfo ai = ri.activityInfo; if (ai! = Null) { Log.i (TAG, "receptor:" + ai.nombre); } } bastante fácil. –

+0

Hola Jared, deberías publicar la respuesta a esta pregunta tú mismo, luego puedes hacer que el código tenga un buen formato. ¡No se preocupe, está bien aceptar su respuesta a su propia pregunta! –

+0

Gracias Dan. Fui a hacer eso, pero no me lo permitieron porque soy un nuevo miembro y tengo que esperar 8 horas para responder mi propia pregunta. Lo haré cuando se cumplan las 8 horas :) –

Respuesta

16

He formateado para personas. Use esto y gracias por la pregunta.

PackageManager packageManager = getPackageManager(); 
List<String> startupApps = new ArrayList<String>(); 
Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED); 
List<ResolveInfo> activities = packageManager.queryBroadcastReceivers(intent, 0); 
for (ResolveInfo resolveInfo : activities) { 
    ActivityInfo activityInfo = resolveInfo.activityInfo; 
    if (activityInfo != null) { 
     startupApps.add(activityInfo.name); 
    } 
} 
Cuestiones relacionadas