Android7.0系统新特性

在android7.0上,我们需要在应用内实现更新apk并且安装包的时候,无法再像之前那样了。随着Android版本越来越高,Android对隐私的保护力度也越来越大。比如:Android6.0引入的动态权限控制(Runtime Permissions),Android7.0又引入“私有目录被限制访问”,“StrictMode API 政策”


“私有目录被限制访问“ 是指在Android7.0中为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录将被限制访问。

" StrictMode API 政策" 是指禁止向你的应用外公开 file:// URI。 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常。


7.0安装apk

1.在AndroidManifest中注册FileProvide

Android7.0系统新特性_第1张图片

2.在xml文件夹中创建file_paths文件,来声明可以访问的路径


Android7.0系统新特性_第2张图片
name是代表别名,用来隐藏文件夹,path才是真实的子目录路径


FileProvider所支持的几种path类型

该方式提供在应用的内部存储区的文件/子目录的文件。它对应Context.getFilesDir返回的路径:eg:"/data/data/包名/files"。



该方式提供在应用的内部存储区的缓存子目录的文件。它对应getCacheDir返回的路径:eg:“/data/data/包名/cache”;

该方式提供在外部存储区域根目录下的文件。它对应Environment.getExternalStorageDirectory返回的路径:eg:"/storage/emulated/0";

该方式提供在应用的外部存储区根目录的下的文件。它对应Context.getExternalFilesDir(String)  Context.getExternalFilesDir(null)返回的路径。eg:"/storage/emulated/0/Android/data/包名/files"。

该方式提供在应用的外部缓存区根目录的文件。它对应Context.getExternalCacheDir()返回的路径。eg:"/storage/emulated/0/Android/data/包名/cache"。


这些类型在Android手机内部存储区文件共享是可以的,但对于外置SD卡是不行的,如果你想通过FileProvider.getUriForFile()获取一个外置SD卡的Uri则会报出 


java.lang.IllegalArgumentException- Failed to find configured root that contains

解决办法是在file_paths文件中添加节点


最后,安装apk的方法

Android7.0系统新特性_第3张图片


官方文档地址:

https://developer.android.google.cn/reference/android/support/v4/content/FileProvider

你可能感兴趣的:(Android7.0系统新特性)