- 可用于用于存放私有持久文件 。
- 非常适合用于存放app各种伴随app运行周期所需要的文件数据 , 它既不会因为手机存储空间不足而被清理 , 也不会因卸载app而遗留数据垃圾 , 并且它是私有的 。
- 归类存放私有文件 。
- 在内部私有目录下会创建一个名为app_name的文件夹 , mode以前是可以设置文件夹私有(MODE_PRIVATE)和公有的(MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE) , 但目前公有的mode都已经废弃 , 意味着这个api创建的文件夹已经完全私有 , 不能再共享出去了 。
在Android Q之前其他应用是可以访问修改外部存储的应用私有目录的 , 这个要注意 。
使用外部存储之前一定要检查外部存储是否可用 , 因为旧设备不一定会有外部存储 , 新手机也不一定会给你读写权限 , 就算用户不给你权限 , 你的app也要运行啊 , 不然就不用你的了 。
public static boolean isSDCardEnable {return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState);}
- getExternalCacheDir
- 专门用于存放缓存数据 。和内部存储的getCacheDir相似 。
- 专门用于存放缓存数据 。和内部存储的getCacheDir相似 。
- getExternalFilesDir(String type)
- 归类存放公有文件 。
- 如果type不为的话在外部私有目录下创建返回一个名为type的文件夹 , 为直接返回外部私有根目录 。如无特别需要 , 个人的做法是传入Environment的DIRECTORY常量进行文件夹创建 。
- 如果看完这篇你还不会选用api , 那就把你应用杂七杂八的东西都放进去吧 , 文件至少不用东一件西一件的 , 卸载之后也能够被正确清理掉 , 不过也要控制好占用的存储空间 。
- 归类存放公有文件 。
- getExternalMediaDirs
- 可存放共享媒体文件 。
- 这个是在Android 5.0加入的api , 创建和获取位于/sdcard/Android/media目录下的应用目录 , 该目录下的文件能够被其他应用访问和被MediaStore查询和获取 。但目前较少开发者在使用这个api 。
- 可存放共享媒体文件 。
公有目录获取公有目录要使用Environment的Api , 它返回的目录全都是共享的公有目录 。造成Android手机文件存储混乱的罪魁祸首!为数众多的无责任开发者在这里胡乱创建文件夹 , 乱起名、乱放文件 , 普通用户根本无法判断哪些文件夹、文件是有用的 , 卸载app之后留下庞大的无法清理的垃圾文件 , 导致手机空间不足 。于是它们在Android Q被废弃了 , 但是Q之前还是能好好使用的 , 我认为要开始减少使用它们 , 更多地使用Context下的私有目录API 。
- getExternalStorageDirectory
- 获取外部存储(SD卡)的根目录 。使用getExternalStoragePublicDirectory(String)进行替代即可 。
- 获取外部存储(SD卡)的根目录 。使用getExternalStoragePublicDirectory(String)进行替代即可 。
- getExternalStoragePublicDirectory(String type)
- 使用频率极高的api , 返回在根目录下的名为type的文件夹 , 我把它分为两种用法:一种是传入Environment的DIRECTORY常量再创建子目录使用;一种是传入appPackageName或者易被识别归属的名称创建子目录使用 。前者会比较通用 , 内容可以被各种工具app搜索发现(包括微信);后者算是私用 , 可以存放不跟随app生命的文件 , 即卸载后也可以保留 。
- Environment.DIRECTORY_DCIM是手机的相册 , 这个文件夹都是系统相关的app在用 , 存放相机拍摄的图片 , 手机截图之类的 , 不推荐开发者使用这个文件夹 , 避免混乱 。值得一提的是淘宝有在使用这个文件夹 , 用于保存它的商品分享截图 , 这个位置的确可以避免被微信封杀~哈哈
- Environment.DIRECTORY_PICTURES用于存放各种“正式的”图片 , 强烈建议在这里创建文件夹存放你想要被用户发现的图片 , 并且微信会扫描这个文件夹 , 让你的图片更容易分享 。不过还 。
- Environment.DIRECTORY_DOWNLOADS可以用于存放app更新的apk等下载资源 。
- 其他几个比较少用就不介绍了 。
- 使用频率极高的api , 返回在根目录下的名为type的文件夹 , 我把它分为两种用法:一种是传入Environment的DIRECTORY常量再创建子目录使用;一种是传入appPackageName或者易被识别归属的名称创建子目录使用 。前者会比较通用 , 内容可以被各种工具app搜索发现(包括微信);后者算是私用 , 可以存放不跟随app生命的文件 , 即卸载后也可以保留 。
上面提到Environment的两个公有目录常用API在Android Q被废弃了 , 应用存储功能沙箱化 , 文件存放到沙箱外面要使用 DocumentFile , 共享媒体文件要使用MediaStore进行 , 详细的适配已有其他开发者分享出来了 , 推荐一下这篇:Android Q 存储机制大变化(
推荐阅读
- Android中的线程捕获
- OPPO方面确认,Find X2系列将尝鲜Android 11
- Android网络优化篇-从DNS开始
- 总是听到有人说AndroidX,到底什么是AndroidX?
- 不要轻易点击别人给你发的链接,看Kali如何远程控制Android手机
- 手机浮窗怎么去掉
- Android 日常开发总结的技术经验
- Android开发:手把手带你入门跨平台UI开发框架Flutter
- Android程序员如何快乐地学Activity?
- android知识点总结