android收录

Android7.0系统新特性

2018-05-14  本文已影响17人  徐大哈_401d

在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

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

name是代表别名,用来隐藏文件夹,path才是真实的子目录路径

FileProvider所支持的几种path类型

<files-path name="name" path="path">

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

<cache-pathname="name" path="path">

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

<external-path name="name" path="path">

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

<external-files-path name="name" path="path">

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

<external-cache-path name="name" path="path" >

该方式提供在应用的外部缓存区根目录的文件。它对应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文件中添加<root_path />节点

最后,安装apk的方法

官方文档地址:

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

上一篇 下一篇

猜你喜欢

热点阅读