android系统中,有很多管理服务相关的类:TelephoneManager,WindowManager,SmsManager,ActivityManager等。
本文主要介绍下packageManager。这个服务主要用户获取应用程序中的packageName,icon,label等,初次之外,他也可以获取应用程序的占用内存大小以及缓存大小等信息。
•安装,卸载应用
•查询permission相关信息
•查询Application相关信息(application,activity,receiver,service,provider及相应属性等)
•查询已安装应用
•增加,删除permission
•清除用户数据、缓存,代码段等
我们可以用PackageManager来显示系统安装的应用程序列表或者系统程序列表
首先来看一张图:
这张图很清晰的解释了各个工具类对应的能获取应用的相关信息。
对于PackageManger 类说明: 获得已安装的应用程序信息 。可以通过getPackageManager()方法获得。
Demo1:利用PackagerManager这个类获取应用程序的相关的信息。得到应用程序的列表。
public class GetPackAge {
private Context context;
private PackageManager pm;
public GetPackAge(Context context) {
this.context = context;
pm = context.getPackageManager();
}
public List<appinfo> getappinfo() throws Exception {
//这句的意思是获取有可能被系统删除的但是还在应用程序列表中保留的appname.因为有些apk可能被删掉 但是数据还在 所以用GET_UNINSTALLED_PACKAGES 这个flag
List<PackageInfo> infos = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
List<appinfo> appinfos = new ArrayList<appinfo>();
for (PackageInfo info : infos) {
appinfo app = new appinfo();
// packagename
String packname = info.packageName;
app.setAppName(packname);
// appname
String appname = info.applicationInfo.loadLabel(pm).toString();
app.setAppName(appname);
// icon
Drawable appicon = info.applicationInfo.loadIcon(pm);
app.setAppicon(appicon);
// version
String appversion = info.versionName;
app.setVersion(appversion);
ApplicationInfo appinfo = pm.getPackageInfo(packname, 0).applicationInfo;
if (filterApp(appinfo)) {
app.setSystem(true);
} else {
app.setSystem(false);
}
appinfos.add(app);
app = null;
}
return appinfos;
}
}
关于测试类主要是就是建一个测试类,然后测试打印出自己需要的信息就可以了。
另外一个作用就是获取Launcher的相关信息。
package com.luochuang.luncherTest;
import java.util.ArrayList;
import java.util.List;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import com.luochuang.bean.LauncherItem;
public class LauncherManager {
private Context context;
private PackageManager packager;
public LauncherManager(Context context) {
this.context = context;
packager = context.getPackageManager();
}
public List<LauncherItem> getluncher() {
List<LauncherItem> lvalue = new ArrayList<LauncherItem>();
Intent it = new Intent(Intent.ACTION_MAIN);
it.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> ResolveInfos = packager.queryIntentActivities(it, 0);
for (int i = 0; i < ResolveInfos.size(); i++) {
ActivityInfo infos = ResolveInfos.get(i).activityInfo;
String name = infos.loadLabel(packager).toString();
Drawable image = infos.loadIcon(packager);
ComponentName component = new ComponentName(
infos.applicationInfo.packageName, infos.name);
LauncherItem item = new LauncherItem(name,image,component);
lvalue.add(item);
}
return lvalue;
}
}