2011-11-15 1 views
9

Sto cercando di ottenere un elenco di ricevitori che gestiscono android.intent.action.BOOT_COMPLETED per altre applicazioni.Ottieni filtro intent per ricevitori

posso ottenere solo le applicazioni con quella azione con questa:

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

posso ottenere un elenco di ricevitori con questo codice:

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

Dopo ricevo i ricevitori non posso dire che cosa l'intent-filter/action è. Se un'app ha due ricevitori, è necessario sapere quale gestisce android.intent.action.BOOT_COMPLETED. C'è un modo per ottenere queste informazioni?

+1

Ok, penso di aver capito. packageManager finale pm = getPackageManager(); final Intent intent = new Intent ("android.intent.action.BOOT_COMPLETED"); lista finale activity = pm.queryBroadcastReceivers (intent, 0); per (RisolviInfo ri: attività) { Log.i (TAG, "nome app:" + ri.loadLabel (pm)); // Cosa mi serviva: ActivityInfo ai = ri.activityInfo; if (ai! = Null) { Log.i (TAG, "destinatario:" + ai.name); } } abbastanza facile. –

+0

Ciao Jared, dovresti pubblicare tu stesso la risposta a questa domanda, quindi puoi rendere il codice ben formattato. Non ti preoccupare, va bene accettare la tua risposta alla tua stessa domanda! –

+0

Grazie Dan. Sono andato a farlo ma non me lo permetteva dato che sono un nuovo membro e devo aspettare 8 ore per rispondere alla mia domanda. Lo farò quando saranno trascorse le 8 ore :) –

risposta

16

Ho riformattato per le persone. Usa questo e grazie per la domanda.

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