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

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条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 创建了问题 10月9日

      悬赏问题

      • ¥15 为什么我的虚拟机断开与主机连接的键是灰色的点不了的
      • ¥15 python 分组计算百分比问题
      • ¥30 关于overflow ,final ALU
      • ¥15 ckeditor工具栏自定义样式
      • ¥15 silvaco 器件仿真的问题
      • ¥20 用c语言设计程序:给定一个从{a,b,c}到其自身的函数f={(a,a),(b,c),(c,b)},判断函数f是否有反函数?
      • ¥15 编写java程序查找回文字符串
      • ¥15 搭建openstack
      • ¥15 几何图形的绘制c++
      • ¥15 英文 软件没办法脱壳,有没有办法进行汉化