0

我想显示每个已安装应用程序的名称和图标。为此,我正在使用以下代码检索信息:

List<PackageInfo> apps = getPackageManager().getInstalledPackages(0);
ArrayList<AppInfo> res = new ArrayList<>();
for(int i=0;i<apps.size();i++) {
    PackageInfo p = apps.get(i);
    if((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0){
        AppInfo newInfo = new AppInfo();
        newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString();
        newInfo.pname = p.packageName;
        newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
        res.add(newInfo);
    }
}

我已经有一个自定义ListView来显示图标和应用程序名称,但是对于图标我需要一个IDor URI

newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());

它给了我类似的东西:

android.graphics.drawable.BitmapDrawable@[numbers+letters]" (e.g. android.graphics.drawable.BitmapDrawable@803da37)

而且我不知道如何使用它。

有没有办法检索URI 或ID从这些数据中检索?

有人在这里发布了一个关于这个BitmapDrawable@...的问题,但没有答案。

编辑: 实际上,我用 a 存储数据HashMap<String, String>,所以我有类似的东西:

map.put("name",p.applicationInfo.loadLabel(getPackageManager()).toString());
map.put("img", p.applicationInfo.loadIcon(getPackageManager()).toString());

然后,我使用SimpleAdapter

myListView = (ListView) findViewById(R.id.customListView);
SimpleAdapter myAdapter = new SimpleAdapter(this.getBaseContext(),listApp,R.layout.myLayout,
        new String[]{"img","name"},new int[]{R.id.img,R.id.name});
myListView.setAdapter(myAdapter);

我知道使用它不是一个好主意,HashMap<String, String>但我不知道如何以不同的方式使用它。

4

2 回答 2

0

p.applicationInfo.loadIcon(getPackageManager()) 将为您提供drawable。直接将其设置为 imageView。不需要 URI 或 ID。

于 2015-08-20T23:02:24.480 回答
0

p.applicationInfo.loadIcon(getPackageManager()); 是为应用程序/包图标检索可绘制对象的正确方法。请检查你的显示方式。我怀疑该地区有一些问题。

于 2015-08-20T22:58:38.477 回答