Android 访问存储卡的三种主要的目录

news/2024/7/7 23:29:41

Android 访问存储卡(即外部存储)通常涉及以下三种主要的目录:

1. 外部存储公共目录 (Public External Storage)

这些目录对所有应用都是可见的,并且不需要任何特殊权限来读取媒体文件。但是从Android 10(API 级别 29)开始,如果要写入这些目录,则需要WRITE_EXTERNAL_STORAGE权限,并且访问路径可能受到某些限制。

  • 获取方法:使用Environment.getExternalStoragePublicDirectory()方法,传入一个类型参数如Environment.DIRECTORY_PICTURESEnvironment.DIRECTORY_MUSIC等。

  • 特点:适合保存用户希望长期保留并可以与其他应用共享的文件,如照片、音乐等。

2. 外部存储应用特定目录 (App-specific External Storage)

这些目录是应用专属的,在应用卸载后会自动删除里面的内容。不需要任何权限即可读写这些目录中的文件。

  • 获取方法:通过调用Context.getExternalFilesDir()方法获取。它可以传入一个类型参数,例如Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),或者传入null来访问根目录。

  • 特点:适合存储应用的临时缓存数据或不需要与其他应用共享的大型文件。

3. 外部存储缓存目录 (External Cache Directory)

这是用于存储临时缓存文件的目录。系统可能在存储空间不足时删除这些缓存文件。

  • 获取方法:通过调用Context.getExternalCacheDir()来访问。

  • 特点:适合存放应用运行过程中产生的临时缓存文件。

使用方面的区别

  1. 权限

    • 公共目录:从Android 4.4开始,不需要权限就可以读取媒体文件,但Android 10及更高版本对文件写入做了限制。
    • 应用特定目录和缓存目录:不需要任何权限就可以进行读写操作。
  2. 数据持久性

    • 公共目录:文件通常被保留,直到用户手动删除它们。
    • 应用特定目录和缓存目录:当应用被卸载时,其中的文件会被自动删除。
  3. 共享性

    • 公共目录:文件可以被用户和其他应用访问。
    • 应用特定目录:虽然理论上其他应用也可以访问,但实际上主要是为当前应用服务的,其他应用通常不会去访问。
  4. 隐私性

    • 公共目录:由于所有应用都可以访问,所以隐私性较差。
    • 应用特定目录:相对私密,不易被其他应用访问。
  5. 存储策略

    • 公共目录:建议仅存储用户主动创建或明确希望与他人分享的文件。
    • 应用特定目录:适合存储应用的核心数据和不需共享的大型资源文件。
    • 缓存目录:适合存储临时文件,应用必须能够处理这些文件被系统删除的情况。
  6. Android 10(API 级别 29)以上的存储变更

    • 引入分区存储(Scoped Storage),限制了对外部存储的全局访问,强制应用使用自己的应用特定目录,或通过MediaStore API访问共享文件类型。

开发者在选择存储位置时,应该考虑到这些区别,并基于用户的数据隐私以及文件的用途选择正确的存储路径。

另外更全的介绍 《Android 文件存储系统》


http://lihuaxi.xjx100.cn/news/1987120.html

相关文章

技术资讯:npm 淘宝镜像正式到期,赶紧更新!

大家好,我是大澈! 本文约800字,整篇阅读大约需要2分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单!…

flutter极光推送配置厂商通道(华为)笔记--进行中

一、基础集成按照下面官方文档进行 厂商通道相关参数申请教程 集成厂商 集成指南 官方文档:厂商通道回执配置指南 注意:不同厂商对app上架的要求不同,华为、荣耀 对app上架没有硬性要求 遇到问题 1、引入apply plugin: com.huawei.agconn…

4.远程登录服务

目录 1. 简介 1.1. 概念 1.2. 功能: 1.3. 分类 1.3.1. 文字接口: 1.3.2. 图形接口: 1.4. 文字接口连接服务器: 2. 连接加密技术简介 2.1. 密钥解析: 3. SSH工作过程: 3.1. 版本协商阶段 3.2. 密钥和算法协商阶段 3.3. 认证阶段(两…

函数递归(Recursion)一篇便懂

递归的概念 在 C 语言中,递归(Recursion)是一种函数调用自身的编程技术。当一个函数在其定义中调用自身时,就称为递归函数。 了解递归思想 把⼀个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解…

搭建nodejs服务器

简单搭建nodejs服务器,用于爬虫js逆向. 1、安装镜像源 下载nrm npm install -g nrm 设置下载源:(最好使用npm源或者淘宝源) 例子:npm config set registry http://registry.npmjs.org 查看是否设置成功&#xff1a…

2023春秋杯冬季赛 --- Crypto wp

文章目录 前言Cryptonot_wiener 前言 比赛没打,赛后随便做一下题目 Crypto not_wiener task.py: from Crypto.Util.number import * from gmpy2 import * import random, os from hashlib import sha1 from random import randrange flagb x bytes_to_long(f…

day15打卡

day15打卡 226. 翻转二叉树 递归解法: 时间复杂度:O(N),空间复杂度:O(N) class Solution { public:TreeNode* invertTree(TreeNode* root) {//出口if(root nullptr) return root;swap(root->left, root->right);TreeNo…

linux服务器ssh连接慢问题处理

一、 可能导致慢的几个原因 1、网络问题:网络延迟、带宽限制和包丢失等网络问题都有可能导致SSH连接变慢。 2、客户端设置:错误的客户端设置,如使用过高的加密算法或不适当的密钥设置,可能导致SSH连接变慢。 3、服务器负载过高…