关于Android7.0 ,8.0应用内安装APK的问题

关于7.0

     Android在7.0之后对文件访问权限做了变更,为了提高私有目录的安全性,防止应用信息的泄漏,从 Android 7.0 开始,应用私有目录的访问权限被做限制。具体表现为,开发人员不能够再简单地通过 file:// URI 访问其他应用的私有目录文件或者让其他应用访问自己的私有目录文件。当我们在应用中使用包含 file:// URI 的 Intent 离开自己的应用时,程序会发生故障。,出现 FileUriExposedException 异常,导致应用出现崩溃闪退问题。解决方案是使用FileProvider,,就是 ContentProvider 的一个特殊子类,帮助我们将访问受限的 file:// URI 转化为可以授权共享的 content:// URI

  首先 在Manifest 文件中注册一个Provider


 其中,android:authorities 属性值是一个由 build.gradle 文件中的 applicationId 值和自定义的名称组成的 Uri 字符串(这样写是约定俗成的)。"${applicationId}" 是应用的id 即包名,".fileProvider" 是自己定义的名字,当然也可以不写。android:authorities = "${applicationId}",那么后面调用这个provider的时候就不用加上后面的名字        

安装应用时判断是否7.0以上的系统

authorities 即是我们在Manifest中申请的provider中的那个属性,这里传入 getPackageName()+".fileProvider" 。后面的自定义名称和provider中写的一样

关于8.0

    Android在8.0之后   未知来源的应用是不可以通过代码来执行安装的。未知权限开关也被移除,取而代之的是未知来源应用的管理列表。需要在代码中申请打开应用安装未知来源的权限。

首先在Manifest 需要的开启权限


调用安装前判断是否为8.0以上系统
申打开未知来源应用的权限

注意!!!在6.0之后是需要申请动态权限的,这里我们需要的是读写权限。

Manifest.permission.WRITE_EXTERNAL_STORAGE,

Manifest.permission.READ_EXTERNAL_STORAGE

如果没有动态申请读写内存的权限,那么最后调起安装时候会报“解析软件包时出现问题”。关于动态权限的申请请查看其他资料。


你可能感兴趣的:(关于Android7.0 ,8.0应用内安装APK的问题)