Android 7.0 弹出框安装/sdcard/目录下的APK,提示解析包错误

fcj124648987 fcj124648987 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位大大:
小弟,有礼了。
如题,小弟在实现安装功能的时候,出现了问题。
安装函数:

private static void installNormal(Context context, String apkPath) {
Intent intent = new Intent(Intent.ACTION_VIEW);
// 版本在7.0以上是不能直接通过uri访问的
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
File file = (new File(apkPath));
// 由于没有在Activity环境下启动Activity,设置下面的标签
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致 参数3 共享的文件
Uri apkUri = FileProvider.getUriForFile(context, "com.my.localopera.provider", file);
// 添加这一句表示对目标应用临时授权该Uri所代表的文件
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive");
}
context.startActivity(intent);
}

调用上述函数时,如果传入的路径是“/sdcard/Android/data/com.my.localopare/xxx.apk”,可以正常弹出提示框。
但是,如果传入的路径是“/sdcard/myDownload/xxx.apk”,就会提示解析软件包时出现问题。
对此,小弟,很是疑惑。下面的代码就是配置的文件路径,
我的疑问:
是我的文件路径配置有误,还是Android7.0就只允许安装自己data目录下的apk文件呢?

<resources xmlns:android="http://schemas.android.com/apk/res/android">
<paths>
<external-path path="Android/data/com.my.localopera/" name="files_root"/>
<external-path path="myDownload/" name="root"/>
</paths>
</resources>

AndroidManifest.xml

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.my.localopera.provider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_path" />
</provider>
...全文
评论 9
收藏 已收藏
分享
返回顶部
fcj124648987
Android 80,490 成员 91,375 内容