如何从 BitmapDrawable 检索 URI 或 ID
How to retrieve URI or ID from BitmapDrawable
我想显示每个已安装应用程序的名称和图标。为此,我正在使用以下代码检索信息:
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
来显示图标和应用程序名称,但是对于图标我需要一个 ID
或 URI
。
newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
它给了我类似的东西:
android.graphics.drawable.BitmapDrawable@[numbers+letters]" (e.g. android.graphics.drawable.BitmapDrawable@803da37)
而且我不知道如何使用它。
有没有办法从此数据中检索 UR
I 或 ID
?
有人发布了关于此的问题 BitmapDrawable
@... here 但没有答案。
编辑:
实际上,我正在用 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>
不是一个好主意,但我不知道如何使用不同的方法。
p.applicationInfo.loadIcon(getPackageManager());是检索 appliacation/package 图标的可绘制对象的正确方法。请检查你显示它的方式。我怀疑该区域存在一些问题。
p.applicationInfo.loadIcon(getPackageManager()) 将为您提供可绘制对象。直接设置为imageView。不需要 URI 或 ID。
我想显示每个已安装应用程序的名称和图标。为此,我正在使用以下代码检索信息:
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
来显示图标和应用程序名称,但是对于图标我需要一个 ID
或 URI
。
newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
它给了我类似的东西:
android.graphics.drawable.BitmapDrawable@[numbers+letters]" (e.g. android.graphics.drawable.BitmapDrawable@803da37)
而且我不知道如何使用它。
有没有办法从此数据中检索 UR
I 或 ID
?
有人发布了关于此的问题 BitmapDrawable
@... here 但没有答案。
编辑:
实际上,我正在用 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>
不是一个好主意,但我不知道如何使用不同的方法。
p.applicationInfo.loadIcon(getPackageManager());是检索 appliacation/package 图标的可绘制对象的正确方法。请检查你显示它的方式。我怀疑该区域存在一些问题。
p.applicationInfo.loadIcon(getPackageManager()) 将为您提供可绘制对象。直接设置为imageView。不需要 URI 或 ID。