2011-05-28 21 views
14

Hola, quiero obtener una lista de todas las aplicaciones instaladas en el dispositivo de los usuarios. He estado buscando en Google por más tiempo pero no puedo encontrar lo que quiero. bien, excepto que soy nuevo, no entiendo cómo usar el método getPackages(); y crear una lista con ellaObtener lista de aplicaciones de Android instaladas

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

Cualquier ayuda sobre cómo crear la lista real sería una gran ayuda tengo todo ese código ya no se puede obtener la lista para mostrar realidad gracias por cualquier ayuda

+0

Muchas cosas, pero nada que no forzar cerrar o darme errores el método aparentemente devuelve una lista de matrices, pero siendo nuevo en esto no sé cómo mostrar eso en una lista en la pantalla como una lista de vista – user577732

Respuesta

57

Estuve trabajando en algo como esto recientemente. Una cosa que diré por adelantado es estar seguro y realizar esto en un hilo separado: consultar la información de la aplicación es LENTO. A continuación, obtendrá una lista de TODAS las aplicaciones instaladas. Esto incluirá una gran cantidad de aplicaciones del sistema que probablemente no está interesado en.

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

limitarlo a solo las aplicaciones del sistema actualizado, instalado por el usuario o (por ejemplo, mapas, Gmail, etc), que utilizan el siguiente lógica:

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: Además, para obtener el nombre y el icono de la aplicación (que es probablemente lo que toma más tiempo - no he hecho ninguna inspección de bienes profunda en él - se usa:

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

insta lledApps debería tener una lista completa de las aplicaciones que necesitas, ahora. Espero que esto ayude, pero puede que tenga que modificar la lógica un poco dependiendo de qué aplicaciones necesite devolver. Una vez más, es LENTO, pero es algo en lo que tienes que trabajar. Es posible que desee construir un caché de datos en una base de datos si es algo a lo que accederá con frecuencia.

+0

no, en su mayoría estoy interesado en las aplicaciones del sistema, realmente escribo aplicaciones raíz solo, así que voy a echar un vistazo a esto ahora, gracias – user577732

+0

Considere usar un adaptador. Hará que la lista se mueva más rápido, pero se cargará instantáneamente, sin importar qué tan grande sea la lista. – tacone

+0

Quiero acceder a los procesos en ejecución actuales (aplicaciones instaladas por el usuario y aplicaciones del sistema por separado). ¿Podrías ayudarme? –

Cuestiones relacionadas