2010-10-26 15 views
18
PackageManager pm = this.getPackageManager(); 
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); 

List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses(); 

for(RunningAppProcessInfo process : runningAppProcesses) { 
    try { 
     ApplicationInfo ai = pm.getApplicationInfo(process.processName, PackageManager.GET_META_DATA); 
     Log.d(TAG, applicationInfo.name + ""); 
    } catch (NameNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

process.processName devuelve un nombre de paquete válido, pero applicationInfo.name siempre es nula.applicationInfo.name de PackageManager es siempre nula

Respuesta

30

Usado applicationInfo.loadLabel(packageManagerInstance) para encontrar el nombre de la aplicación, pero debe haber una razón por la applicationInfo.name no funcionó.

Editar

applicationInfo.name es el nombre de una subclase Application si tiene alguno.

+0

Gracias, este truco funcionó. applicationInfo.name no funciona para mí. –

+0

también para mí applicationInfo.name no funciona –

+0

¡Yo tampoco! :-X –

0

probar este

Log.d(TAG, ai.processName + ""); 

o esta

Log.d(TAG, ai.packageName + ""); 
+0

¡Trabajos! pero devuelve el nombre del paquete, no el nombre de la aplicación. Igual que process.processName –

8

El nombre de la razón es nulo, es que realmente es ... nulo.

Por favor, consulte la documentación de manifiesto de Android:

android: name El nombre completo de la subclase aplicación implementada para la aplicación. Cuando se inicia el proceso de solicitud , esta clase se crea una instancia antes de cualquiera de los componentes de la aplicación .

La subclase es opcional; la mayoría de las aplicaciones no necesitarán una. En la ausencia de una subclase, Android usa una instancia de la clase base Application .

Lo que desea es el nombre de la aplicación, que se establece en el atributo de la etiqueta de la aplicación, y que Ragunath explicó cómo obtenerla.

Cuestiones relacionadas