2011-05-28 12 views
14

Ciao Voglio ottenere un elenco di tutte le applicazioni installate sul dispositivo degli utenti Sono stato googling per il tempo più lungo ma non riesco a trovare quello che voglio questo collegamento è stato il più vicino però e funziona bene, tranne che io sono nuovo, non capisco come usare il metodo getPackages(); e creare un elenco con essoOttieni l'elenco delle applicazioni Android installate

http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon

Qualsiasi aiuto su come creare l'elenco attuale sarebbe un aiuto importante che ho tutto quello che il codice già in proprio non può ottenere l'elenco di mostrare in realtà grazie per qualsiasi aiuto

+0

Un sacco di cose ma nulla che non forzasse o mi desse errori il metodo apparentemente restituisce un arraylist ma essendo nuovo a questo non so come visualizzarlo in una lista sullo schermo come una vista elenco – user577732

risposta

57

Stavo lavorando a qualcosa di simile di recente. Una cosa che dirò in anticipo è per essere sicuro ed eseguire questo in un thread separato - interrogando le informazioni dell'applicazione è SLOW. Quanto segue ti fornirà un elenco di TUTTE le applicazioni installate. Ciò includerà un sacco di applicazioni di sistema che probabilmente non interessa.

PackageManager pm = getPackageManager(); 
List<ApplicationInfo> apps = pm.getInstalledApplications(0); 

di limitarla a solo le applicazioni installate dall'utente o di sistema aggiornato (ad esempio programmi, Gmail, ecc), ho usato il seguente logica:

List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>(); 

for(ApplicationInfo app : apps) { 
    //checks for flags; if flagged, check if updated system app 
    if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { 
     installedApps.add(app); 
    //it's a system app, not interested 
    } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { 
     //Discard this one 
    //in this case, it should be a user-installed app 
    } else { 
     installedApps.add(app); 
    } 
} 

EDIT: Inoltre, per ottenere il nome e l'icona per l'applicazione (che è probabilmente quello che prende il più lungo - non ho fatto alcun reale ispezione approfondita su di esso - utilizzare questo:

String label = (String)pm.getApplicationLabel(app); 
Drawable icon = pm.getApplicationIcon(app); 

insta lledApps dovrebbe avere un elenco completo delle app di cui hai bisogno, ora. Spero che questo aiuti, ma potrebbe essere necessario modificare la logica un po 'a seconda di quali app devono essere restituite. Di nuovo, è LENTO, ma è solo qualcosa che devi risolvere. Potresti voler costruire una cache di dati in un database se è qualcosa a cui accedi frequentemente.

+0

no sono per lo più interessato alle app di sistema in realtà scrivo solo le app di root, per cui ora posso dare un'occhiata a questo grazie – user577732

+0

Considerare l'utilizzo di un adattatore. Renderà la lista più scorrevole, ma verrà caricata istantaneamente, non importa quanto grande sia la lista. – tacone

+0

Desidero accedere ai processi in esecuzione correnti (app installate dall'utente e app di sistema separatamente). Potete per favore aiutarmi? –

Problemi correlati