Android获取安装程序列表
最近在做一个扫描Android系统内已安装程序列表的小功能,需要将已安装程序信息读出来,找出其图标,并保存到一个List<Map<String,Object>>中。方法如下
private List<Map<String, Object>> getInstalledApps() {
List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
List<Map<String, Object>> listMap = new ArrayList<Map<String,Object>>(packages.size());
for (int j = 0; j < packages.size(); j++) {
Map<String, Object> map = new HashMap<String, Object>();
PackageInfo packageInfo = packages.get(j);
//显示非系统软件
if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0){
map.put("img", packageInfo.applicationInfo.loadIcon(getPackageManager()).getCurrent());
map.put("name", packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
map.put("desc", packageInfo.packageName);
listMap.add(map);
}
}
return listMap;
}在获得已安装程序后的程序后,网上搜到的方法是使用SimpleAdapter更新ListView里面的数据:private void refreshListItems() {
SimpleAdapter adapter = new SimpleAdapter(this, map, R.layout.item_row,
new String[]{"img","name","desc"}, new int[]{R.id.img,R.id.name,R.id.desc});
listView.setAdapter(adapter);
setTitle("软件信息,已经安装"+this.map.size()+"款应用");
}上面代码中的R.id.img是每行中ImageView的ID号,但是用这种方式,只能更新图像保存在res/drawable/下面的图像资源为了使图片能够显示,我们需要将Drawable对象转为图片的id修改的代码如下:
private void refreshListItems() {
SimpleAdapter adapter = new SimpleAdapter(this, map, R.layout.item_row,
new String[]{"img","name","desc"}, new int[]{R.id.img,R.id.name,R.id.desc});
adapter.setViewBinder(new ViewBinder(){
public boolean setViewValue(View view,Object data,String textRepresentation){
if(view instanceof ImageView && data instanceof Drawable){
ImageView iv=(ImageView)view;
iv.setImageDrawable((Drawable)data);
return true;
}
else return false;
}
});
listView.setAdapter(adapter);
setTitle("软件信息,已经安装"+this.map.size()+"款应用");
}
另外在获取程序列表的时候我们可以根据(packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)判断其是不是为0可以判断是不是系统程序:
//显示非系统软件
if((packageInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0){
map.put("img", packageInfo.applicationInfo.loadIcon(getPackageManager()).getCurrent());
map.put("name", packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
map.put("desc", packageInfo.packageName);
listMap.add(map);
}
本文介绍了一种在Android系统中获取已安装应用程序列表的方法,并详细解释了如何通过代码将这些信息展示在ListView上,包括如何处理图标显示的问题。

1万+

被折叠的 条评论
为什么被折叠?



