欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android 版本、权限适配相关总结

程序员文章站 2022-06-23 09:42:53
请求存储权限首先需要在 androidmanifest.xml 文件中声明权限:在代码中请求用户权限:版本适配从 android 6.0 到 android 10 存储/访问文件功能,有发生了很多变化...

请求存储权限

首先需要在 androidmanifest.xml 文件中声明权限:

在代码中请求用户权限:

版本适配

从 android 6.0 到 android 10 存储/访问文件功能,有发生了很多变化。

android 7.0 前

在android 7.0 以前我们访问内存中的文件可以通过 uri.fromfile,将 file 转换成 uri 对象,这个 uri 对象表示这本地真实路径。 访问一个图片:

android 7.0 后

在 7.0 后,这种通过真实路径来获取的 uri 被认为是不安全的,所以提供了一种新的解决方案,就是通过 fileprovide 来实现文件的访问,fileprovider 是一种比较特殊的内容提供器,他使用了类似于内容提供器的机制来对数据进行保护。 访问一个图片:

然而上面这种真的好吗,对用开发者而且这算是好处吧,但是对用用户而言,上述的无疑一些流氓作用,因为开发者完全可以访问的内存中的所有位置,并作出一些改变,导致 sd 卡中的空间变得非常乱,即使卸载了 app,但是一些垃圾文件却还在内存中。

android 10.0

在 android 10.0 ,为了解决上述问题,google 在 android 10.0 中加入了 作用域功能。

什么是作用域

就是 android 系统对 sd 卡做了很大的限制,从 android 10.0 开始,每个程序只能有权在自己的外置存储空间关联的目录下读取和创建相应的文件,也称作沙箱。获取该目录的代码是:getexternalfilesdir() ,关联的目录路径大致如下:

将数据放在这个目录下,你可以使用之前的方法对文件进行读写,不需要作出任何变更和适配。但是这个文件夹中的文件会随着应用卸载而被随之删除。 那如果需要访问其他目录怎么办呢?比如获取相册中的图片,向相册中添加一张图片。为此,android 系统针对系统文件类型进行了分类:图片,音频,视频 这三类文件可以通过 mediastore api 来进行访问,这种称为共享空间,其他的系统文件需要使用 系统的文件选择器来进行访问,另外,如果程序向媒体库写入图片,视频,音频,将会自动用于读写权限,不需要额外申请权限,如果你要读取其他程序向媒体贡献的图片,视频,音频,则必须要申请 read_external_storage 权限,write_external_storage 权限会在未来的版本中被废弃。

举个栗子

举例说明:有一张本地图片,向这张图片添加水印,并保存到相册。

直接上代码:

以上就是android 版本、权限适配相关总结的详细内容,更多关于android 版本、权限适配的资料请关注其它相关文章!