From ab3a61bfc927d293756dce70e6d13146b9bb0dfc Mon Sep 17 00:00:00 2001 From: TongTongStudio Date: Mon, 27 Jul 2026 07:59:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ApkUtils):=20=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E6=89=93=E5=BC=80=E4=B8=8E=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ttstd/dialer/utils/ApkUtils.java | 115 ++++++------------ 1 file changed, 36 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/com/ttstd/dialer/utils/ApkUtils.java b/app/src/main/java/com/ttstd/dialer/utils/ApkUtils.java index 0786d66..55a1e70 100644 --- a/app/src/main/java/com/ttstd/dialer/utils/ApkUtils.java +++ b/app/src/main/java/com/ttstd/dialer/utils/ApkUtils.java @@ -23,71 +23,53 @@ public class ApkUtils { public static boolean isInstalled(Context context, String packageName) { if (TextUtils.isEmpty(packageName)) return false; - PackageManager packageManager = context.getPackageManager(); try { - PackageInfo packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); - return packageInfo != null; + return context.getPackageManager().getPackageInfo(packageName, 0) != null; } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); + return false; + } + } + + /** + * 判断是否为系统应用 + * + * @param context 上下文 + * @param pkgName 包名 + * @return + */ + public static boolean isSystemApp(Context context, String pkgName) { + try { + PackageManager pm = context.getPackageManager(); + PackageInfo pi = pm.getPackageInfo(pkgName, 0); + return (pi.applicationInfo.flags & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0; + } catch (PackageManager.NameNotFoundException e) { + Logger.e("isSystemApp: ", "NameNotFoundException:" + e.getMessage()); + return false; } - return false; } public static boolean openPackage(Context context, String packageName) { - Context pkgContext = getPackageContext(context, packageName); - Intent intent = getAppOpenIntentByPackageName(context, packageName); - if (pkgContext != null && intent != null) { - pkgContext.startActivity(intent); - return true; + if (TextUtils.isEmpty(packageName)) { + return false; } - Logger.e(TAG, "openPackage: can not open " + packageName); + if (!isInstalled(context, packageName)) { + PopTip.show("应用未安装").iconError(); + return false; + } + Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); + if (intent != null) { + try { + context.startActivity(intent); + return true; + } catch (ActivityNotFoundException e) { + Logger.e(TAG, "openPackage: " + e.getMessage()); + } + } + Logger.e(TAG, "openPackage: can not open " + packageName); PopTip.show("打开失败").iconError(); return false; } - public static Context getPackageContext(Context context, String packageName) { - Context pkgContext = null; - if (context.getPackageName().equals(packageName)) { - pkgContext = context; - } else { - // 创建第三方应用的上下文环境 - try { - pkgContext = context.createPackageContext(packageName, - Context.CONTEXT_IGNORE_SECURITY - | Context.CONTEXT_INCLUDE_CODE); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - } - return pkgContext; - } - - - public static Intent getAppOpenIntentByPackageName(Context context, String packageName) { - //Activity完整名 - String mainAct = null; - //根据包名寻找 - PackageManager pkgMag = context.getPackageManager(); - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK); - - List list = pkgMag.queryIntentActivities(intent, - PackageManager.GET_ACTIVITIES); - for (int i = 0; i < list.size(); i++) { - ResolveInfo info = list.get(i); - if (info.activityInfo.packageName.equals(packageName)) { - mainAct = info.activityInfo.name; - break; - } - } - if (TextUtils.isEmpty(mainAct)) { - return null; - } - intent.setComponent(new ComponentName(packageName, mainAct)); - return intent; - } - public static boolean openApp(Context context, ComponentName componentName) { Intent intent = new Intent() .setComponent(componentName) @@ -152,31 +134,6 @@ public class ApkUtils { return resolveInfoList; } - /** - * 判断是否为系统应用 - * - * @param context 上下文 - * @param pkgName 包名 - * @return - */ - public static boolean isSystemApp(Context context, String pkgName) { - boolean isSystemApp = false; - PackageInfo pi = null; - try { - PackageManager pm = context.getPackageManager(); - pi = pm.getPackageInfo(pkgName, 0); - } catch (PackageManager.NameNotFoundException e) { - Logger.e("isSystemApp: ", "NameNotFoundException:" + e.getMessage()); - } - // 是系统中已安装的应用 - if (pi != null) { - boolean isSysApp = (pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; - boolean isSysUpd = (pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; - isSystemApp = isSysApp || isSysUpd; - } - return isSystemApp; - } - public static void openAppStore(Context context, String pkg) { Uri uri = Uri.parse("market://details?id=" + pkg);