在andorid 7.0之前我们只需要使用
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive")
即可安装apk,但是在7.0以后为了提高私有文件的安全性,面向 Android 7.0 或更高版本的应用私有目录被限制访问 (0700)。
传递软件包网域外的file://URI 可能给接收器留下无法访问的路径。因此,尝试传递file://URI 会触发FileUriExposedException。分享私有文件内容的推荐方法是使用FileProvider。
1.首先就要在Manifast里面 添加一个provider
android:authorities="com.fxyx.activity.yiduan_fxyx.fileProvider" 这个属性里面 要记得在.fileProvider之前改成自己的包名
2.然后在res目录下创建一个xml的文件夹 ,在里面创建file_paths的资源文件(注:名字可以随便起 但是要和provider里面的名字相同 一致)
创建好资源文件以后 里面添加
在这里external-pathpath=" ",我给的是空的 这样安装的时候就可以是在整个目录下查找,如果给了固定的目录,那它就只会在固定的目录下查找要安装的文件
3.前两步创建好以后 就要写我们的方法了
首先我们要判断是否是高版本的系统,如果还是低版本的 就依旧使用原来的方法即可安装,如果是高版本的系统,就要使用FileProvider.getUriForFile 这个方法来获取临时uri权限 赋予项目,从而保证私有目录的权限不被破坏
最后运行 就会发现apk已经可以运行安装了。