安装本地apk文件,会报exposed beyond app through Intent.getData()异常,但是用了
https://blog.csdn.net/weixin_42415553/article/details/96440013?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165482831316780357288214%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165482831316780357288214&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-96440013-null-null.142^v12^pc_search_result_cache,157^v13^control&utm_term=exposed+beyond+app+through+Intent.getData%28%29&spm=1018.2226.3001.4187
这个方法后,不报异常,但是无法打开apk文件,没有任何响应
Android如何安装apk文件
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 三杯五岳 2022-06-10 10:45关注
先试试手动装一下,是否能打开
下面是我封装好的,常用方法(包含判断某个应用是否安装、安装应用、打开应用等),拿走不谢/** * 安装apk * * @param context * @param file */ public static void installApk(Context context, File file) { Uri uri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //判断是否是AndroidN以及更高的版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Uri contentUri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file); intent.setDataAndType(contentUri, "application/vnd.android.package-archive"); } else { intent.setDataAndType(uri, "application/vnd.android.package-archive"); } context.startActivity(intent); } /** * 卸载apk * * @param context 上下文 * @param packageName 包名 */ public static void uninstallApk(Context context, String packageName) { Intent intent = new Intent(Intent.ACTION_DELETE); Uri packageURI = Uri.parse("package:" + packageName); intent.setData(packageURI); context.startActivity(intent); } /** * 某应用是否安装 * * @param context * @param packageName * @return */ public static boolean isApkInstalled(Context context, String packageName) { if (TextUtils.isEmpty(packageName)) return false; try { ApplicationInfo info = context.getPackageManager().getApplicationInfo( packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return true; } catch (PackageManager.NameNotFoundException e) { return false; } } public static boolean isApkInstalled(Context context, String packageName, String verName) { if (TextUtils.isEmpty(packageName)) return false; try { ApplicationInfo info = context.getPackageManager().getApplicationInfo( packageName, PackageManager.GET_UNINSTALLED_PACKAGES); String verNameNow = getVerName(context, packageName); if (verName.equals(verNameNow)) return true; else return false; } catch (PackageManager.NameNotFoundException e) { return false; } } /** * 打开另一个应用 * * @param activity * @param packageName * @param className * @param errorHint */ public static void showAnotherApp(Activity activity, String packageName, String className, String errorHint) { LogUtils.d(TAG, "showAnotherApp"); if (AppUtils.isApkInstalled(activity, packageName)) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); activity.startActivity(intent); } else { ToastUtils.showShortToast(errorHint + "未安装"); } } /** * 根据包名打开应用 * * @param activity * @param packagename */ public static void showAnotherAppWithPackageName(Activity activity, String packagename, String errorHint) { if (AppUtils.isApkInstalled(activity, packagename)) { // 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等 PackageInfo packageinfo = null; try { packageinfo = activity.getPackageManager().getPackageInfo(packagename, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (packageinfo == null) { return; } // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); //resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(packageinfo.packageName); // 通过getPackageManager()的queryIntentActivities方法遍历 List<ResolveInfo> resolveinfoList = activity.getPackageManager() .queryIntentActivities(resolveIntent, 0); if (resolveinfoList == null || resolveinfoList.size() == 0) { return; } ResolveInfo resolveinfo = resolveinfoList.iterator().next(); if (resolveinfo != null) { // packagename = 参数packname String packageName = resolveinfo.activityInfo.packageName; // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname] String className = resolveinfo.activityInfo.name; // LAUNCHER Intent Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); // 设置ComponentName参数1:packagename参数2:MainActivity路径 ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); activity.startActivity(intent); } } else { ToastUtils.showShortToast(errorHint + "未安装"); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 斯坦福自动漂移非线性模型反解
- ¥15 学习Python如何找兼职
- ¥15 python结合Matlab仿真忆阻器
- ¥35 有人会注册whatsaop协议号吗?
- ¥15 lead dbs 无法导入影像数据
- ¥15 多目标MPA算法优化编程实现
- ¥15 反激PWM控制芯片调研
- ¥15 Python for loop减少运行时间
- ¥15 fluent模拟物质浓度udf
- ¥15 Collection contains no element matching the predicate