应用冻结器-Package信息的获取
我们要做的的事情是冻结一个应用,没有应用的信息怎么能行咧。第一步当然的获取应用的信息鸭。
那么问题来了,要怎么获取呢?
可以通过PackageInfo来获取所需的应用信息。安卓给我们提供PackageManager,在Context上下文对象中,通过getPackageManager()可以获取PackageManager对象。再通过该对象的getInstalledPackages()方法可以获取应用信息。
实现代码如下:
//获取应用信息
public List<PackageInfo> getPackages() {
return getPackageManager().getInstalledPackages(0);
}
有了PackeageInfo,我们就可以获取到应用的各种信息,如包名,应用名,应用图标等信息。由于我们要在应用中显示一个列表,列表里面显示应用的包名、应用名、图标、是否被冻结的信息。所以我们还要对这个返回的PackageInfo做进一步的处理。
我们把要的信息存放进HashMap里,再把这个Map放进列表里,这样遍历Map对象用相应的Key值取出信息就行了。
实现代码如下:
//获取主要的应用信息
public List<HashMap<String, Object>> getAppMainInfo(List<PackageInfo> packages) {
PackageManager pm = getPackageManager();
List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
for (PackageInfo pkage : packages){
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("packageName", pkage.packageName);
map.put("labelName", (String)pm.getApplicationLabel(pkage.applicationInfo);
map.put("icon", getAppIconByPackageName(pkage.packageName));
map.put("enabled", pkage.applicationInfo.enabled);
list.add(map);
}
return list;
}
嗯?貌似上面的getAppIconByPackageName函数似乎不是安卓自带的鸭。其实该函数是为了代码更加整洁,把获取应用图标的代码提炼出来写成一个函数。
代码如下:
//获取应用图标,成功返回应用图标,失败返回默认图标
public Drawable getAppIconByPackageName(String packageName){
Drawable drawable;
try{
drawable = getPackageManager().getApplicationIcon(packageName);
}
catch (PackageManager.NameNotFoundException e){
e.printStackTrace();
drawable = getDrawable(R.mipmap.ic_launcher);
}
return drawable;
}
Ok,获取应用信息的工作基本完成。通过获取应用信息,对PackageManager和PackageInfo有基本的了解。