在权限专题前两篇文章中,我们对位置、短信权限的合理使用场景、不合理使用场景进行了详细说明,本文将对存储权限的合理使用场景、不合理使用场景进行梳理总结。下图为《绿标5.0安全标准》对于存储权限的要求:
申请外部存储权限几乎成为了应用的标配,但也不是所有的应用都真正意义上需要这个权限,应用应基于自身业务功能和场景,以权限申请最小化为原则去申请授权。
首先,我们先对安卓的存储目录做个简单介绍。安卓存储分为内部存储、外部存储、系统存储,外部存储又分为私有目录存储、公有目录存储。内部存储路径为:/data/data/packagename(包名),外部存储的私有目录路径为:/storage/emulated/0/Android/data/packagename(包名)。在 Android 4.4(API 级别19)或更高版本中,应用无需请求任何与存储空间相关的权限即可访问外部存储空间中的应用私有目录。卸载应用后,系统会移除这些目录中存储的文件。而外部存储公有目录存储则需要申请
android.permission.WRITE_EXTERNAL_STORAGE(写入外部存储)
与android.permission.READ_EXTERNAL_STORAGE(读取外部存储)
两个权限。获取外部存储的共享文件夹路径有九种type,分别对应不同的目录,如下:
1.DIRECTORY_MUSIC:音乐类型
2.DIRECTORY_PICTURES:图片类型
3.DIRECTORY_MOVIES:电影类型
4.DIRECTORY_DCIM:照片类型,相机拍摄的照片视频都在这个目录
5.DIRECTORY_DOWNLOADS:下载文件类型
6.DIRECTORY_DOCUMENTS:文档类型
7.DIRECTORY_RINGTONES:铃声类型
8.DIRECTORY_ALARMS:闹钟提示音类型
9.DIRECTORY_NOTIFICATIONS:通知提示音类型
对于内部存储路径、外部存储路径的全部内容,小伙伴们可以参考下图。
Android存储目录 关于数据和文件存储的详细介绍,请参见安卓官方网站:
https://developer.android.com/training/data-storage。下表总结了安卓几种保存应用数据的选项(援引自上述安卓官网):
一、读、写外部存储权限合理使用场景
1.影音娱乐、便捷生活类等:a.将应用中的音频、视频、图片、文件存储到本地,或者对本地相册中的图片、视频编辑进行二次创作;b.在用户换头像、背景图,从相册中选择图片的场景下,仅可申请android.permission.READ_EXTERNAL_STORAGE;
2.实用工具类:在下载的文件、录屏软件保存下的录屏或截屏等媒体文件需要长期保存不随应用卸载而删除的场景下,可申请android.permission.WRITE_EXTERNAL_STORAGE;当用户需要打开或读取分享本地其他应用的文件(例如图片、音频、视频、文档表格等文件)时可申请
android.permission.READ_EXTERNAL_STORAGE;
3.游戏类:下载游戏内精美场景图片、精彩高光视频,并存储到本地。
二、读、写外部存储权限不合理使用场景
1.应用本身的缓存、日志存储;
2.新闻阅读类:a.缓存文章中的图片资讯,但是并没有保存、下载资讯中图片的行为,无需申请读取存储权限;b.下载的电子书在私有目录中,无需申请存储权限;c.用户分享网页链接时,无需申请存储权限;
3.游戏类:a.游戏资源包的更新;b.加载游戏中的广告资源,如观看广告视频30S赠送游戏积分、道具;
4.离线缓存至外部存储私有目录/storage/emulated/0/Android/data/packagename(包名),无需申请READ_EXTERNAL_STORAGE权限和WRITE_EXTERNAL_STORAGE权限;
5.安卓10及以上的应用通过拍照方式上传头像不需申请 READ_EXTERNAL_STORAGE 和WRITE_EXTERNAL_STORAGE权限,除非对已拍照的图片进行二次编辑,需要申请WRITE_EXTERNAL_STORAGE权限;安卓9及以下应用通过拍照方式上传头像则需要 READ_EXTERNAL_STORAGE 与 WRITE_EXTERNAL_STORAGE权限。
以上就是存储权限的内容,后续还会发布电话、通讯录、无障碍、设备管理器、通知栏、悬浮窗的内容,请持续关注软件绿色联盟。