3

Я создаю список приложений, установленных на телефоне. Я извлекаю все установленное приложение с PackageManager и ResolveInfo. Из-за проблемы с памятью я использую getIconResource() вместо loadIcon().ResolveInfo getIconResource() дает действительно странные результаты (неправильные значки)

Мой вопрос: как я могу отобразить правильные значки в изображенииView с помощью iconResource, int?

EDIT: добавлен код

это та часть, где я создать список с установленными приложениями откладываются в ArrayList apps

private void loadApps(){ 
     manager = getPackageManager(); 
     apps = new ArrayList<AppDetail>(); 

     if(apps.size()==0) { 
      Intent i = new Intent(Intent.ACTION_MAIN, null); 
      i.addCategory(Intent.CATEGORY_LAUNCHER); 
      List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0); 
      for (ResolveInfo ri : availableActivities) { 
       AppDetail app = new AppDetail(); 
       app.label = ri.loadLabel(manager); 
       app.name = ri.activityInfo.packageName; 
       app.icon = ri.activityInfo.getIconResource(); 
       app.allowed = false; 
       apps.add(app); 
      } 
      Log.i("applist", apps.toString()); 
     } 
    } 

В ArrayAdapter я хочу поставить набор иконок в a ImageView

ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon); 
      int id = apps.get(position).icon; 
      appIcon.setImageResource(id); 

Это результат на телефоне, отображающий странные значки (некоторые приложения даже использовать Google иконки плюс:

enter image description here

Это также дает ошибки о не найти ресурс:

W/ResourceType﹕ getEntry failing because entryIndex 1 is beyond type entryCount 1 W/ResourceType﹕ Failure getting entry for 0x7f030001 (t=2 e=1) in package 0 (error -2147483647) W/ImageView﹕ Unable to find resource: 2130903041

+0

вы пробовали [это] (http://stackoverflow.com/questions/11961599/get-resource-id-of-the-icon-of-another -android-приложение)? – dora

+0

Я отредактировал ответ с проблемой – DevelopingBeaver

ответ

3

Проблема заключалась в том, что я был извлечения изображений из неположенном месте. Это был код для получения правильных të иконки:

ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon); 
      String packageName = apps.get(position).name.toString(); 

      try { 
       Drawable icon = getPackageManager().getApplicationIcon(packageName); 
       appIcon.setImageDrawable(icon); 
      } catch (PackageManager.NameNotFoundException e) { 
       e.printStackTrace(); 
      }