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

fcj124648987 2018-06-13 01:41:01
各位大大:
小弟,有礼了。
如题,小弟在实现安装功能的时候,出现了问题。
安装函数:

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>
...全文
1610 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
执着的挖土 2018-07-14
  • 打赏
  • 举报
回复
请问是如何处理的,我现在是这样写的:
         String path = getStoragePath(this, false);

String localPath = path + "/meigongmeijiang";

Log.i("localPath", localPath);

File filenew = new File(localPath,"test2.apk");

// if (filenew.exists()) {
// Log.i("file", "file is exist");
installApk(this,filenew.getAbsolutePath());
// }


获取的路径传进去,弹出解析包出现问题
水手辛巴 2018-06-25
  • 打赏
  • 举报
回复
就是四楼说的意思, 首先你获取SD卡权限,然后FileProvoider把SD卡相应路径做共享提供给其他应用使用
<external-path name="external_files" path="."/>
fcj124648987 2018-06-24
  • 打赏
  • 举报
回复
引用 6 楼 jklwan 的回复:
[quote=引用 5 楼 fcj124648987 的回复:]
这个确实是全目录。但是安装的时候,会提示:解析包时出现问题。
我估计是不允许这样操作,只能安装data/包名/下的app。

先确认文件是否存在,然后你需要动态请求存储卡的读写权限[/quote]

项目启动的时候,就动态申请了读写权限。
我目前已经妥协了,固定将apk文件放在data下。
jklwan 2018-06-15
  • 打赏
  • 举报
回复
引用 5 楼 fcj124648987 的回复:
这个确实是全目录。但是安装的时候,会提示:解析包时出现问题。 我估计是不允许这样操作,只能安装data/包名/下的app。
先确认文件是否存在,然后你需要动态请求存储卡的读写权限
fcj124648987 2018-06-14
  • 打赏
  • 举报
回复
真的,人缘这么差吗?
fcj124648987 2018-06-14
  • 打赏
  • 举报
回复
引用 4 楼 jklwan 的回复:
xml配置改成这样的,就可以用sd卡下所有的路径了
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <paths>
        <root-path name="root" path=""/>
    </paths>
</resources>
这个确实是全目录。但是安装的时候,会提示:解析包时出现问题。 我估计是不允许这样操作,只能安装data/包名/下的app。
jklwan 2018-06-14
  • 打赏
  • 举报
回复
xml配置改成这样的,就可以用sd卡下所有的路径了
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<paths>
<root-path name="root" path=""/>
</paths>
</resources>
fcj124648987 2018-06-13
  • 打赏
  • 举报
回复
人工置顶。。。
fcj124648987 2018-06-13
  • 打赏
  • 举报
回复
没有人吗??

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧