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

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 unity 绘画方面的问题
    • ¥15 FTP 明明给了权限但是还是550 Permission denied问题
    • ¥20 Java的kafka错误unknowHostException
    • ¥20 gbase 8a没有lisense,需要获取一个lisense
    • ¥15 前端的3d饼图不知道用啥框架做的
    • ¥15 算法问题 斐波那契数 解答
    • ¥15 VS2019 SPY++ 获取句柄操作
    • ¥15 Facebook 获取广告
    • ¥15 PID算法的输出结果如何转换成pwm
    • ¥15 java文本解密算法