代码如下:
/**
* 根据包名和类名获取App的icon
*
* @param pkgName 包名
* @param className 类名
*/
public static Drawable getAppIcon(Context context, String pkgName, String className) {
// 查询某个包名下的应用个数
List findList = MainDbHelper.getInstance().getAppContentDao().findAppsFromPackage(pkgName);
Drawable drawable;
if (findList != null) {
if (findList.size() == 1) {
drawable = getAppIcon(context, pkgName);
return drawable;
} else if (findList.size() > 1) {
PackageManager pm = context.getPackageManager();
List resolveInfos = GetLaunchAppTool.getInstence(context).getLaunchApp();
if (resolveInfos != null && resolveInfos.size() > 0) {
for (ResolveInfo resolveInfo : resolveInfos) {
String pkg = resolveInfo.activityInfo.packageName;
if (!TextUtils.isEmpty(pkg) && pkg.equals(pkgName)) {
String clsName = resolveInfo.activityInfo.name;
if (clsName.equals(className)) {
drawable = resolveInfo.loadIcon(pm);
return drawable;
}
}
}
}
}
}
drawable = getAppIcon(context, pkgName);
return drawable;
}
/**
* 根据包名获取App的Icon
*
* @param pkgName 包名
*/
public static Drawable getAppIcon(Context context, String pkgName) {
try {
if (null != pkgName) {
PackageManager pm = context.getPackageManager();
ApplicationInfo info = pm.getApplicationInfo(pkgName, 0);
return info.loadIcon(pm);
}
} catch (Exception e) {
e.printStackTrace();
}
return ResourceManager.getDrawable(R.mipmap.ic_default, context.getTheme());
}
上面实现了两个获取应用icon的方法,第一个方法多了className这个参数,该方法className参数的作用是当几个应用的包名一样时,我们可以用类名区分不同的应用,从而正确的获取出需要的应用的icon;第二个方法就没有className参数,如果几个应用的包名相同,那么它就只能随机的取出其中一个了,可能造成取出的icon并不是我们需要的,所以推荐使用第一种方法,虽然麻烦一点但是可以更加的准确。
代码如下:
/**
* 根据包名和类名获取App的名字
*
* @param pkgName 包名
* @param className 类名
*/
public static String getAppName(Context context, String pkgName, String className) {
// 查询某个包名下的应用个数
List findList = MainDbHelper.getInstance().getAppContentDao().findAppsFromPackage(pkgName);
String label;
if (findList != null) {
if (findList.size() == 1) {
return getAppName(context, pkgName);
} else if (findList.size() > 1) {
PackageManager pm = context.getPackageManager();
List resolveInfos = GetLaunchAppTool.getInstence(context).getLaunchApp();
if (resolveInfos != null && resolveInfos.size() > 0) {
for (ResolveInfo resolveInfo : resolveInfos) {
String pkg = resolveInfo.activityInfo.packageName;
if (!TextUtils.isEmpty(pkg) && pkg.equals(pkgName)) {
String clsName = resolveInfo.activityInfo.name;
if (clsName.equals(className)) {
label = resolveInfo.loadLabel(pm) + "";
return label;
}
}
}
}
}
}
label = getAppName(context, pkgName);
return label;
}
/**
* 根据包名获取App的名字
*
* @param pkgName 包名
*/
public static String getAppName(Context context, String pkgName) {
PackageManager pm = context.getPackageManager();
try {
ApplicationInfo info = pm.getApplicationInfo(pkgName, 0);
return info.loadLabel(pm).toString();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return "";
}
获取应用名字的方法和获取icon一样实现了两个方法,它们的区别也是和获取icon的一样,为了获取的名字更准确,推荐使用方法一。
代码如下:
/**
* 获取版本号
*
* @param context Context
* @return 版本号
*/
public static int getVersionCode(Context context) {
PackageInfo pi;
int code = -1;
PackageManager pm = context.getPackageManager();
try {
pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_CONFIGURATIONS);
code = pi.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return code;
}