启动指定包名的应用(增强版 - 处理特殊应用) @param context 上下文对象 @param packageName 应用包名 @throws Exception 启动失败时抛出异常,成功时返回成功信息
(Context context, String packageName)
| 131 | * @throws Exception 启动失败时抛出异常,成功时返回成功信息 |
| 132 | */ |
| 133 | public static void appStart(Context context, String packageName) throws Exception { |
| 134 | Log.d("monitoru2", "增强版启动应用: " + packageName); |
| 135 | |
| 136 | try { |
| 137 | PackageManager packageManager = context.getPackageManager(); |
| 138 | |
| 139 | // 方法2: 直接组件启动(模拟 ADB 方式) |
| 140 | try { |
| 141 | String activityName = getMainActivityName(packageName); |
| 142 | if (activityName != null) { |
| 143 | Intent intent = new Intent(Intent.ACTION_MAIN); |
| 144 | intent.addCategory(Intent.CATEGORY_LAUNCHER); |
| 145 | intent.setComponent(new ComponentName(packageName, activityName)); |
| 146 | intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); |
| 147 | context.startActivity(intent); |
| 148 | Log.d("monitoru2", "SUCCESS: 直接组件启动成功 - " + packageName); |
| 149 | throw new Exception("SUCCESS: 应用启动成功 - " + packageName); |
| 150 | } |
| 151 | } catch (Exception e) { |
| 152 | if (e.getMessage() != null && e.getMessage().startsWith("SUCCESS:")) { |
| 153 | throw e; |
| 154 | } |
| 155 | Log.d("monitoru2", "直接组件启动失败: " + e.getMessage()); |
| 156 | } |
| 157 | |
| 158 | |
| 159 | |
| 160 | // 所有方法都失败 |
| 161 | throw new Exception("❌ 所有启动方式都失败,应用可能不支持外部启动: " + packageName); |
| 162 | |
| 163 | } catch (Exception e) { |
| 164 | if (e.getMessage() != null && e.getMessage().startsWith("SUCCESS:")) { |
| 165 | throw e; |
| 166 | } |
| 167 | |
| 168 | Log.e("monitoru2", "启动应用失败: " + packageName + ", 错误: " + e.getMessage()); |
| 169 | throw new Exception("启动应用失败: " + e.getMessage()); |
| 170 | } |
| 171 | } |
| 172 | |
| 173 | /** |
| 174 | * 获取应用的主Activity名称 |
no test coverage detected