2010-10-26 2 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 возвращает допустимое имя пакета, но applicationInfo.name всегда нуль.applicationInfo.name PackageManager всегда является нулевым

ответ

30

использовано applicationInfo.loadLabel(packageManagerInstance) найти имя приложения, но не должно быть причиной, почему applicationInfo.name не работает.

Редактировать

applicationInfo.name это имя Application подкласса, если у вас есть.

+0

Спасибо, этот трюк сработал. applicationInfo.name не работает для меня. –

+0

также для меня applicationInfo.name не работает –

+0

Меня тоже нет! :-ИКС –

0

Попробуйте

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

или это

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

Работы! но возвращает имя пакета, а не имя приложения. То же, что и process.processName –

8

Причина имя null что это действительно есть ... null.

Пожалуйста, обратитесь к документации манифеста Android:

андроида: имя Полное имя из подкласса Application реализован для приложения. Когда запускается процесс приложения , этот класс создается до любого из компонентов приложения .

Подкласс не является обязательным; большинство приложений не нуждаются в них. В отсутствие подкласса Android использует экземпляр базового приложения .

Что вы хотите - это имя приложения, которое установлено в атрибуте метки тега приложения и которое Рагунат объяснил, как получить.

Смежные вопросы