2012-05-20 3 views
0
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    lView = (ListView) findViewById(R.id.list1); 
    PackageManager pm = this.getPackageManager(); 

    Intent intent = new Intent(Intent.ACTION_MAIN, null); 
    intent.addCategory(Intent.CATEGORY_LAUNCHER); 

    ArrayList<ResolveInfo> list = (ArrayList<ResolveInfo>)pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED); 
     for (ResolveInfo rInfo : list) { 

      results.add(rInfo.activityInfo.applicationInfo.loadLabel(pm)); 


      Log.w("Installed Applications", rInfo.activityInfo.applicationInfo.loadLabel(pm).toString()); 
     } 

    lView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, results)); 

    } 

Как я могу изменить этот код, чтобы добавить перечисленное приложение со своим собственным значком? что должно включать в main.xml?Список с иконкой приложений в android

ответ

1
private ArrayList<PInfo> getInstalledApps() { 
    ArrayList<PInfo> res = new ArrayList<PInfo>();   
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
    for(int i=0;i<packs.size();i++) { 
     PackageInfo p = packs.get(i); 
     PInfo pInfo = new PInfo(); 
     pInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
     pInfo.pname = p.packageName; 
     pInfo.icon = p.applicationInfo.loadIcon(getPackageManager()); 
     res.add(pInfo); 
    } 
    return res; 
} 

приведенное выше возвращает список массивов PInfo. Это список приложений, значков, а также имена пакетов всех установленных приложений.

+0

lView.setAdapter (новый ArrayAdapter (это, android.R.layout.simple_list_item_1, getInstalledApps())) ... Это показывает список слов ... так, мне нужно создать свой собственный макет для этого? – Dummy1234

+0

Да, именно это ссылка http://rkancharla.wordpress.com/2011/05/09/android-dynamic-list-view-with-image-and-text/ –

1

Попробуйте использовать этот вспомогательный класс

class PInfo { 
    private String appname = ""; 
    private String pname = ""; 
    private String versionName = ""; 
    private int versionCode = 0; 
    private Drawable icon; 
    private void prettyPrint() { 
     Log.v(appname + "\t" + pname + "\t" + versionName + "\t" + versionCode); 
    } 
} 

private ArrayList<PInfo> getPackages() { 
    ArrayList<PInfo> apps = getInstalledApps(false); /* false = no system packages */ 
    final int max = apps.size(); 
    for (int i=0; i<max; i++) { 
     apps.get(i).prettyPrint(); 
    } 
    return apps; 
} 

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) { 
    ArrayList<PInfo> res = new ArrayList<PInfo>();   
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
    for(int i=0;i<packs.size();i++) { 
     PackageInfo p = packs.get(i); 
     if ((!getSysPackages) && (p.versionName == null)) { 
      continue ; 
     } 
     PInfo newInfo = new PInfo(); 
     newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
     newInfo.pname = p.packageName; 
     newInfo.versionName = p.versionName; 
     newInfo.versionCode = p.versionCode; 
     newInfo.icon = p.applicationInfo.loadIcon(getPackageManager()); 
     res.add(newInfo); 
    } 
    return res; 
} 
Смежные вопросы