Android获取安装程序列表

本文介绍了一种在Android系统中获取已安装应用程序列表的方法,并详细解释了如何通过代码将这些信息展示在ListView上,包括如何处理图标显示的问题。

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);
			}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值