Android 获取应用的icon、名字、版本号

Android 获取应用的icon、名字、版本号

1、获取应用的icon

代码如下:

/**
 * 根据包名和类名获取App的icon
 *
 * @param pkgName   包名
 * @param className 类名
 */
public static Drawable getAppIcon(Context context, String pkgName, String className) {
    // 查询某个包名下的应用个数
    List<AppContent> 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<ResolveInfo> 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并不是我们需要的,所以推荐使用第一种方法,虽然麻烦一点但是可以更加的准确。

2、获取应用的名字

代码如下:

/**
 * 根据包名和类名获取App的名字
 *
 * @param pkgName   包名
 * @param className 类名
 */
public static String getAppName(Context context, String pkgName, String className) {

    // 查询某个包名下的应用个数
    List<AppContent> 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<ResolveInfo> 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的一样,为了获取的名字更准确,推荐使用方法一。

3、获取应用的版本号

代码如下:

/**
 * 获取版本号
 *
 * @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;
}
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

埋头丶苦干

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值