迎风微笑的菜鸟 2021-10-09 16:48 采纳率: 0%
浏览 51

Android 9.0安装apk更新 , 解析软件包出错

Android 7 和8 都能正常更新安装apk ,但是android 9 及以上进行到安装步骤就报解析软件包出错 . AS错误信息如下

报错信息

    java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://com.speed.telecom.yunan.pda.fileProvider/update_cache/speed.apk from pid=5178, uid=10019 requires the provider be exported, or grantUriPermission()
        at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:634)
        at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:503)
        at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:494)
        at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:422)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:302)
        at android.os.Binder.execTransact(Binder.java:731)

provider



        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.fileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>


file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <cache-path
        name="update_cache"
        path="." />
</paths>

关键代码


   val intent = Intent(Intent.ACTION_VIEW)

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

                Log.e("包名",BaseApplication.instance.packageName.toString())
                val contentUri: Uri = androidx.core.content.FileProvider.getUriForFile(activity, activity.packageName.toString() + ".fileProvider",apk)

                intent.setDataAndType(contentUri, "application/vnd.android.package-archive")

                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);



            } else {
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                intent.setDataAndType(Uri.fromFile(apk), "application/vnd.android.package-archive")
            }
            _installApkLiveData.postData { model ->
                model.copy(
                    state = StateModel.STATE_SUCCESS,
                    data = intent
                )
            }
  • 写回答

1条回答 默认 最新

  • 偷窃月亮的贼 2021-10-09 16:54
    关注

    报错信息: java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://com.speed.telecom.yunan.pda.fileProvider/update_cache/speed.apk from pid=5178, uid=10019 requires the provider be exported, or grantUriPermission() 已经说明了原因,解决方法:笔记:requires the provider be exported, or grantUriPermission()_u011028536的博客-CSDN博客

    评论

报告相同问题?

问题事件

  • 创建了问题 10月9日

悬赏问题

  • ¥15 加氢站氢负荷数据集来源
  • ¥15 umi接入sentry遇到问题
  • ¥15 HBuilderX打包H5网页,扫码模块无法使用
  • ¥15 Javascript跳转页面后,无法执行后面代码,如何解决?
  • ¥15 echarts绘制图表
  • ¥15 请教两个关于高德地图定位不准的技术问题
  • ¥15 根据企业名称 对照两个文件 样本筛选/匹配
  • ¥15 Linux环境下CA证书更新问题
  • ¥15 sqlserver语句提取结果以外数据
  • ¥60 微信小程序如何上传QQ聊天文件