PackageManager可以获取到一个APP的各项信息,如包名、版本号、图标等信息。
获取PackageManager对象的方法很简单:
PackageManager packageManager = context.getPackageManager();
一般有两种应用场景:获取指定/自身的APP信息、获取所有APP信息
获取自身的APP信息
获取指定APP的信息,需要该APP的包名,而获取自身的信息,可以使用context.getPackageName()来获取自己的包名
更新应用时,需要APP的版本号,和最新版本对比,来判断是否需要更新
/**获取本应用的版本信息*/
public static int getAppMsg(Context context) {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
//版本名
String versionName = packageInfo.versionName;
//版本号
int versionCode = packageInfo.versionCode;
return versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return -1;
}
获取所有APP信息
获取所有APP的信息,PackageManager直接调用getInstalledApplications(int flags)方法即可
/**获取所有APP信息*/
public static ArrayList<AppMsgBean> getAllAppMsg(Context context) {
ArrayList<AppMsgBean> beans = new ArrayList<>();
PackageManager packageManager = context.getPackageManager();
List<ApplicationInfo> applications = packageManager.getInstalledApplications(0);
for(ApplicationInfo app : applications){
//获取应用的包名
String name = app.packageName;
//判断是否是系统应用
boolean isSystemApp = (app.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
//获取应用图标,加载时会比较卡,建议在IO线程执行
Drawable icon = app.loadIcon(packageManager);
//每个APP用一个JAVA Bean封装
AppMsgBean bean = new AppMsgBean(name, icon,isSystemApp);
beans.add(bean);
}
return beans;
}