Android获取应用相关信息的工具类AppUtils

mac2025-09-03  8

获取应用的相关工具类AppUtils如下:

import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.Signature; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import java.util.ArrayList; import java.util.List; public class AppUtils { /** * 获取packInfo */ public static PackageInfo getPackageInfo(Context context, String packageName, int flag) { PackageInfo rlt = null; if (null == context || StringUtil.isStringEmpty(packageName)) { return rlt; } try { PackageManager pm = context.getPackageManager(); if (pm != null) { rlt = pm.getPackageInfo(packageName, flag); } } catch (PackageManager.NameNotFoundException e) { // Log.e("找不到该包名"); } return rlt; } /** * 获取签名 * @param context * @param pakeName * @return */ public static Signature[] getSignature(Context context, String pakeName) { Signature[] rlt = null; PackageInfo packInfo = getPackageInfo(context, pakeName, PackageManager.GET_SIGNATURES); if (null != packInfo) { rlt = packInfo.signatures; } return rlt; } /** * 获取包名 */ public static String getPackage(Context context) { return StringUtil.setStringIfEmpty(context.getPackageName()); } /** * 获取签名MD5 */ public static String getSignatureMd5(Context context, String pakeName) { String rlt = null; Signature[] signs = getSignature(context, pakeName); if (null != signs && signs.length > 0) { StringBuffer sb = new StringBuffer(); for (Signature sig : signs) { sb.append(sig.toCharsString()); } // rlt = SecUtils.getInformationFingerprintByMD5(sb.toString(), StrCharset.UTF_8); } return StringUtil.isStringEmpty(rlt) ? null : rlt; } /** * 获取app名称 */ public static String getAppName(Context context) { if (null == context) { return null; } PackageManager packageManager = context.getPackageManager(); PackageInfo pakeInfo = getPackageInfo(context, context.getPackageName(), PackageManager .GET_UNINSTALLED_PACKAGES); if (pakeInfo != null) { ApplicationInfo appInfo = pakeInfo.applicationInfo; return appInfo.loadLabel(packageManager) .toString(); } return null; } /** * 获取app版本名称 */ public static String getAppVersionName(Context context) { if (null == context) { return null; } PackageInfo packageInfo = getPackageInfo(context, context.getPackageName(), PackageManager .GET_UNINSTALLED_PACKAGES); return null == packageInfo ? null : packageInfo.versionName; } /** * 获取app版本号 */ public static int getAppVersionCode(Context context, String pakeName) { if (null == context) { return 0; } PackageInfo packageInfo = getPackageInfo(context, pakeName, PackageManager .GET_UNINSTALLED_PACKAGES); return null == packageInfo ? 0 : packageInfo.versionCode; } /** * 判断apk是否存在 */ public static boolean isApkExist(Context context, String packageName) { PackageInfo packageInfo = getPackageInfo(context, packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return packageInfo != null; } /** * 获取meta的值 */ public static String getMetaData(Context context, String key) { PackageInfo packageInfo = getPackageInfo(context, context.getPackageName(), PackageManager.GET_META_DATA); ApplicationInfo appInfo = packageInfo.applicationInfo; Bundle metaData = (null != appInfo) ? appInfo.metaData : null; return (null != metaData && !StringUtil.isStringEmpty(key)) ? String.valueOf(metaData.get(key)) : null; } /** * 通过包名启动apk */ public static boolean startApk(Context context, String pakeName) { boolean rlt = false; if (isApkExist(context, pakeName)) { PackageManager pkgMgr = context.getPackageManager(); if (null != pkgMgr) { Intent intent = pkgMgr.getLaunchIntentForPackage(pakeName); if (null != intent) { context.startActivity(intent); rlt = true; } } } return rlt; } /** * 通过包名停止apk */ public static boolean stopApk(Context context, String pakeName) { boolean rlt = false; // 应用存在,且关闭的不是自己 if (isApkExist(context, pakeName) && !context.getPackageName().equalsIgnoreCase(pakeName)) { ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); if (null != manager) { manager.killBackgroundProcesses(pakeName); rlt = true; } } return rlt; } /** * 获取已安装的所有apk的信息 */ public static List<ApkInfo> getInstallApkInfo(Context context) { ArrayList<ApkInfo> appList = new ArrayList<>(); //用来存储获取的应用信息数据 List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0); for (int i = 0; i < packages.size(); i++) { PackageInfo packageInfo = packages.get(i); ApkInfo tmpInfo = new ApkInfo(); tmpInfo.apkName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString(); tmpInfo.pkgName = packageInfo.packageName; tmpInfo.apkVerName = packageInfo.versionName; tmpInfo.verCode = packageInfo.versionCode; if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { appList.add(tmpInfo);//如果非系统应用,则添加至appList } } return appList; } /** * 获取栈中的所有acitivity */ public static List<ActivityManager.RunningTaskInfo> getRuningTaskInfo(Context context) { List<ActivityManager.RunningTaskInfo> rlt = null; if (null == context) { return rlt; } ActivityManager aManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); if (null != aManager) { rlt = aManager.getRunningTasks(100); } return rlt; } /** * 判断该acitivty是否在栈顶 */ public static boolean isAppRunningTopActivity(Context context, String activityName) { boolean rlt = false; if (null == context || TextUtils.isEmpty(activityName)) { return rlt; } List<ActivityManager.RunningTaskInfo> runningTasks = getRuningTaskInfo(context); if (null != runningTasks && !runningTasks.isEmpty()) { String topClsName = runningTasks.get(0).topActivity.getClassName(); // LoggerUtil.e("topClsName:" + topClsName); rlt = !TextUtils.isEmpty(topClsName) && topClsName.equals(activityName); } return rlt; } /** * 判断该是否为系统apk */ public static boolean isSystemApp(Context context, String pakeName) { PackageInfo pi = getPackageInfo(context, pakeName, 0); if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0) { return true; } return false; } /** * 获取应用的启动页className */ public static String getAppStartActivity(Context context, String pakeName) { if (pakeName.isEmpty()) { return ""; } PackageManager packageManager = context.getPackageManager(); Intent intent = packageManager.getLaunchIntentForPackage(pakeName); if (intent != null) { ComponentName componentName = intent.getComponent(); String name = componentName.getClassName(); return name; } return ""; } /** * 判断某个任务是否在运行 * @param context * @param processName * @return */ public static boolean isRunningTaskExist(Context context,String processName){ ActivityManager am=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> processList = am.getRunningAppProcesses(); for(ActivityManager.RunningAppProcessInfo info:processList){ if (info.processName.equals(processName)){ return true; } } return false; } /** * 判断某个服务是否存在 * @param context * @param serName * @return */ public static boolean isServicesExisted(Context context, String serName) { ActivityManager ac = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningServiceInfo> serviceList = ac.getRunningServices(Integer.MAX_VALUE); for (int i = 0; i < serviceList.size(); i++) { ActivityManager.RunningServiceInfo serviceInfo = serviceList.get(i); ComponentName serviceName = serviceInfo.service; if (serviceName.getClassName().equals(serName)) { return true; } } return false; } }

该工具类中用到的ApkInfo类如下:

import android.content.Context; import org.json.JSONException; import org.json.JSONObject; class ApkInfo { public String pkgName; public int verCode; public String apkName; public String apkVerName; public ApkInfo() { } public ApkInfo(Context context) { this.pkgName = context.getPackageName(); this.verCode = AppUtils.getAppVersionCode(context, pkgName); this.apkName = AppUtils.getAppName(context); this.apkVerName = AppUtils.getAppVersionName(context); } public JSONObject toJson() { JSONObject json = new JSONObject(); try { json.put("pkgName", pkgName); json.put("apkName", apkName); json.put("verName", apkVerName); json.put("verCode", verCode); } catch (JSONException e) { return null; } return json; } @Override public String toString() { return "ApkInfo{" + "pkgName='" + pkgName + '\'' + ", verCode=" + verCode + ", apkName='" + apkName + '\'' + ", apkVerName='" + apkVerName + '\'' + '}'; } }

还有其中的StringUtil类:

import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import java.io.UnsupportedEncodingException; /** * @ClassName: StringsUtil * @Model : (所属模块名称) * @Description: (这里用一句话描述这个类的作用) */ public class StringUtil { public static final String UNKNOWN ="undef"; /** * getRealStr (检查输入字符是否符合最大长度,如果超大最大长度,截取前面到最大长度的字串) * * @param str * @param maxLength * @return * String */ public static String getRealStr(String str, int maxLength) { String rlt = StringUtil.UNKNOWN; if (null != str && maxLength > 0) { if (str.length() < maxLength) { rlt = str; } else { rlt = str.substring(0, maxLength); } } return rlt; } /** * @Title: isStringEmpty * @Description: 判断字符串是否为空 * @param strObj * 字符串 * @return boolean true:表示字串为null或者字串为空串,false表示字串不为空 */ public static boolean isStringEmpty(String strObj) { return (null == strObj || strObj.trim().length() == 0); } /** * @Title: isValidate * @Description: 判断字符串是否有效 * @param strObj * 字符串 * @return boolean true:表示字串有效,false表示字串为空或者未知 */ public static boolean isValidate(String strObj) { return (!StringUtil.isStringEmpty(strObj) && !UNKNOWN.equalsIgnoreCase(strObj.trim())); } public static boolean isValidates(String... strObjs) { if(null != strObjs && strObjs.length > 0) { for(int i = 0; i < strObjs.length;i++) { if(StringUtil.isStringEmpty(strObjs[i])) { return false; } } } return true; } public static String setStringIfEmpty(String strObj) { return StringUtil.isStringEmpty(strObj) ? StringUtil.UNKNOWN : strObj; } public static String setStringIfEmpty(String strObj, String defaultValue) { return StringUtil.isStringEmpty(strObj) ? defaultValue : strObj; } /** * * @Title: getUTF8Bytes * @Description: 将字串转为utf_8编码的字节流 * @param str * 字串 * @return byte[] 字节流 */ public static byte[] getUTF8Bytes(String str) { return getBytes(str, "UTF-8"); } public static String getString(byte[] bytes) { String rlt = StringUtil.UNKNOWN; if (null == bytes || bytes.length == 0) { return StringUtil.UNKNOWN; } try { rlt = new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return rlt; } /** * @Title: getBytes * @Description: 将字串转为指定编码格式的字节流 * @param str * 字串 * @param charset * 编码格式 * @return byte[] 字节流 */ public static byte[] getBytes(String str, String charset) { byte[] rlt = new byte[0]; if (StringUtil.isStringEmpty(str) || StringUtil.isStringEmpty(charset)) { return rlt; } try { rlt = str.getBytes(charset); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return rlt; } public static String[] getUrl(String[] url_dee, String url_sec) { String[] url = new String[url_dee.length]; if(null != url_dee && url_dee.length > 0 && isValidate(url_sec)) { for(int i = 0; i < url_dee.length; i++) { url[i] = url_dee[i] + url_sec; } return url; } return null; } public static String getMetaData(Context context, String name) { String rlt = null; PackageManager pm = context.getPackageManager(); try { ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); if (appInfo != null) { Bundle metaData = appInfo.metaData; if (metaData != null) { Object obj = metaData.get(name); if (null != obj) rlt = obj.toString(); } } } catch (Exception e) { e.printStackTrace(); } return (isStringEmpty(rlt) ? UNKNOWN : rlt); } public static String cutStr(String targetStr, String positionStr) { String rltStr = targetStr == null || !targetStr.contains(positionStr) ? null : targetStr.substring(targetStr.indexOf(positionStr) + positionStr.length()).trim(); return rltStr; } }
最新回复(0)