2-3.Android 存储之存储空间(私有空间、公共空间)

一、内部存储与外部存储

  1. 内部存储指位于设备的内部存储空间

  2. 外部存储指位于设备的外部存储介质,例如,SD 卡

  • 简单理解,内部存储就是存储在手机自身,外部存储就是存储在手机可以外接的东西,好比电脑的硬盘和 U 盘

二、存储空间

  • Android 中存储空间分为私有空间和公共空间,这两种空间在数据存储的用途上和访问权限有所不同
1、私有空间
  1. 私有空间是专门为每个应用程序分配的存储空间

  2. 它用于存储该应用程序的私有数据,例如,数据库文件、SharedPreferences 文件、缓存文件等

  3. 私有空间通常位于设备的内部存储中

  4. 私有空间通常具体位于 /data/data/【应用包名】/

  5. 应用程序可以直接在其私有空间内读写文件,无需任何权限

  6. 私有空间会随着应用的消亡而消亡

2、公共空间
  1. 公共空间是供所有应用程序共享的存储空间

  2. 它用于存储公共数据,例如,照片、音频、视频等

  3. 公共空间分为内部存储和外部存储

  4. 公共空间通常具体位于 /storage/emulated/0/(模拟的 SD 卡路径),或位于 /storage/【external_storage】/(真实的外部存储介质路径)

  5. 访问公共空间中的数据需要相应的权限,有 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

  6. 公共空间不会随着应用的消亡而消亡


三、存储空间的目录

1、私有空间的目录
(1)基本介绍
  1. /data/data/【应用包名】/:应用的根目录

  2. /data/data/【应用包名】/files/:应用存储持久性文件的目录,例如,配置文件

  3. /data/data/【应用包名】/cache/:应用存储缓存文件的目录,系统可能会在设备存储空间不足时自动清除这些文件

  4. /data/data/【应用包名】/databases/:应用存储数据库文件的目录

  5. /data/data/【应用包名】/shared_prefs/:应用存储 SharedPreferences 文件的目录

(2)注意事项
  1. 我们通常只关注并直接获取 files 和 cache 目录

  2. 通常不会直接获取 databases 和 shared_prefs 目录

  3. 我们通常只关注内部存储的私有空间的目录

(3)目录获取
  1. 获取内部存储的私有空间的目录
String filesDirPath = getFilesDir().getPath();
Log.i(TAG, "------------------------------ " + filesDirPath);String cacheDirPath = getCacheDir().getPath();
Log.i(TAG, "------------------------------ " + cacheDirPath);
  • 输出结果
I/MainActivity: ------------------------------ /data/user/0/com.my.storage/files
I/MainActivity: ------------------------------ /data/user/0/com.my.storage/cache
  1. 获取外部存储的私有空间的目录
String externalFilesDirPath = getExternalFilesDir(null).getPath();
Log.i(TAG, "------------------------------ " + externalFilesDirPath);// 可以通过传递 type 参数来获取不同类型的子目录
String externalFilesPicturesDirPath = getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath();
Log.i(TAG, "------------------------------ " + externalFilesPicturesDirPath);String externalCacheDirPath = getExternalCacheDir().getPath();
Log.i(TAG, "------------------------------ " + externalCacheDirPath);
  • 输出结果
I/MainActivity: ------------------------------ /storage/emulated/0/Android/data/com.my.storage/files
I/MainActivity: ------------------------------ /storage/emulated/0/Android/data/com.my.storage/files/Pictures
I/MainActivity: ------------------------------ /storage/emulated/0/Android/data/com.my.storage/cache
2、公共空间的目录
(1)基本介绍
  1. 图片:通常位于 /storage/emulated/0/Pictures/ 下,用于存储图片,例如,用户拍摄的照片、应用下载的图片

  2. 音频:通常位于 /storage/emulated/0/Music//storage/emulated/0/Audio/ 下,用于存储音频,例如,用户下载的音频、应用产生的音频

  3. 视频:通常位于 /storage/emulated/0/Movies//storage/emulated/0/Video/ 下,用于存储,例如,如用户录制的视频、应用下载的视频

  4. 下载:通常位于 /storage/emulated/0/Download/ 下,用于存储下载的文件,例如,APK 安装包、文档、压缩包

  • 注:公共空间的目录具体路径可能因设备而异
(2)目录获取
String picturesDirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
Log.i(TAG, "------------------------------ " + picturesDirPath);String musicDirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath();
Log.i(TAG, "------------------------------ " + musicDirPath);String moviesDirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getPath();
Log.i(TAG, "------------------------------ " + moviesDirPath);String downloadDirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath();
Log.i(TAG, "------------------------------ " + downloadDirPath);
  • 输出结果
I/MainActivity: ------------------------------ /storage/emulated/0/Pictures
I/MainActivity: ------------------------------ /storage/emulated/0/Music
I/MainActivity: ------------------------------ /storage/emulated/0/Movies
I/MainActivity: ------------------------------ /storage/emulated/0/Download

四、存储空间的版本变化

  • 从 Android 10(API 级别 29)开始,Android 引入了分区存储机制,以限制应用对存储空间访问
  1. 在 Android 10 之前,应用可以直接通过文件系统来访问私有空间和公共空间,简单来说就是通过路径可以直接访问

  2. 在 Android 10 之后,应用开始只能通过文件系统来访问私有空间,想要访问公共空间,需要借助其他方式,例如,存储访问框架(SAF)、MediaStore

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/142046.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Scratch教学案例 —— 制作生日蛋糕

小虎鲸Scratch资源站-免费少儿编程Scratch作品源码,素材,教程分享网站! 简介 在这个教学案例中,我们将使用Scratch制作一个简单而有趣的生日蛋糕动画。通过这个项目,学生可以学习到如何使用Scratch中的基本编程块进行角色控制、造型切换、舞台背景设置以…

CefSharp_Vue交互(Element UI)_WinFormWeb应用---设置应用透明度(含示例代码)

一、界面预览 1.1 设置透明(整个页面透明80%示例) 限制输入值:10-100(数字太小会不好看见) 1.2 vue标题栏 //注册类与js调用 (async function(

如何从 GitHub 上克隆项目

GitHub 是一个广泛使用的代码托管平台,开发者们可以在上面共享和管理他们的代码。如果你想要快速获取一个项目的代码,可以通过克隆(clone)仓库来实现。本文将详细介绍如何从 GitHub 上克隆项目的步骤。更多内容,请查询…

中介者模式:提升代码可维护性的利器

一,介绍 中介者模式(Mediator Pattern)是一种行为设计模式,它定义了一个中介者对象来封装一系列对象之间的交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,可以独立地改变它们之间的交互。 …

CefSharp_Vue交互(Element UI)_WinFormWeb应用(2)---置顶和取消置顶(含示例代码)

一、预览 获取winform的置顶参数,和设置置顶参数 1.1 置顶(默认不置顶) 1.2 示例代码

进程间关系和守护进程

序言 当我们使用指令 ps 查看进程的相关信息时,在以前我们只是关注该进程的 PID(该进程的标识符) , PPID(其父进程的标识符) 以及 STAT(该进程的状态)。  那 PGID 和 SID 又是什么?有什么作用呢? 1. 进程组 1.1 什么是进程组&am…

视频工具EasyDarwin将本地视频生成RTSP给WVP拉流列表

效果 ffmpeg生成rtsp流 EasyDarwin的rtsp端口默认的是10054, 使用ffmpeg将本地视频转到EasyDarwin的rtsp。 F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://127.0.0.1:10054/video11 它的直播…

基于SpringBoot+Vue+MySQL的在线视频教育平台

系统展示 用户前台界面 管理员后台界面 系统背景 随着信息技术的飞速发展和互联网普及率的不断提高,传统教育模式正面临深刻变革。在线视频教育平台作为数字化教育的重要载体,以其灵活性强、资源丰富、覆盖广泛等优势,逐渐成为人们获取知识、…

RS232

What is RS232 Protocol? In RS232, ‘RS’ stands for Recommended Standard. It defines the serial communication using DTE and DCE signals. Here, DTE refers to Data Terminal Equipment and DCE refers to the Data Communication Equipment. Example of DTE device…

1184. 公交站间的距离(24.9.16)

题目 环形公交路线上有n个站,按次序从 0 到n - 1进行编号。已知每一对相邻公交站之间的距离,distance[i]表示编号为i的车站和编号为(i 1) % n的车站之间的距离。环线上的公交车都可以按顺时针和逆时针的方向行驶。要求返回乘客从出发点start到目的地de…

数组学习内容

动态初始化 只给长度,数据类型【】 数组名new 数据类型【数组长度】 内存图

打造最佳自闭症患全寄宿学校:为孩子的未来保驾护航

在广州这座繁华而温暖的城市中,隐藏着一片专为自闭症儿童精心打造的避风港——星贝育园自闭症儿童寄宿制学校。这里,不仅是一所学校,更是无数家庭希望的灯塔,用爱与专业为孩子们铺设了一条通往更加独立自主生活的道路。 一、爱的…

泛读笔记:从Word2Vec到BERT

自然语言处理(NLP)模型的发展历史 1.统计方法时期:使用贝叶斯方法、隐马尔可夫模型、概率模型等传统统计方法 2.机器学习时期:支持向量机(SVM)、决策树模型、随机森林、朴素贝叶斯等传统机器学习方法 3.深度学习革命:各种新的深度学习模型&am…

卸载完mathtype后,删除word加载项中的mathtype

请参考博客“卸载完mathtype后,word加载项中还是有mathtype的解决方法_怎么删除word加载项里的mathtype-CSDN博客”以及 “安装卸载MathType经验解决MathType DLL找不到的问题——超实用_mathtype dll cannot-CSDN博客” 如果在删除.dotm文件时,删不掉…

01 企业成长助力计划

1,企业和军队一个共同点: 必须不断打胜仗,才能持续活下去并活的有力量。 2,从知道到做到,其实非常艰难 3,大道至简,知易行难 4,华为值得大家学习么,哪些值得学习,学习什么,怎么学。 5,企业发展的瓶颈 6,学习什么? 学习华为是怎么学习别人的。 学习华为是如何批…

TCP协议分析《实验报告》

一、实验目的 1、理解TCP协议; 2、掌握TCP协议三次握手建立连接和四次挥手释放连接的过程; 3、理解TELNET协议及工作过程; 4、掌握TCP协议分析方法。 二、实验设备和环境 1、硬件设备:PC机或笔记本电脑; 2、软件…

金融行业中如何利用数据中台的数据来有效的驱动业务决策呢?

前言​ 在金融行业中,利用数据中台的数据来有效驱动业务决策是一个复杂而关键的过程。其实我们的核心就是帮助金融机构最大化数据中台的价值,并推动业务决策的科学性和准确性。本文我从技术的角度来剖析一下这一过程。​ 什么是数据中台?​…

【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)

一. 命名空间 1. 定义 出现的意义:解决各种函数、关键词和类的名称冲突问题。 定义方式:namespace 命名空间的名字 { } (注意!}后面不加;) namespace 是关键词命名空间的…

前端基础知识(HTML+CSS+JavaScript)

文章目录 一、HTML1.1 HTML 基础:1.1.1 HTML 的概念:1.1.2 认识 HTML 标签:1.1.3 HTML 文件基本结构:1.1.4 标签层次结构: 1.2 HTML 快速入门:1.3 HTML常见标签:1.3.1 标题标签:h1-h…

智能家政保洁|基于java和vue的智能家政保洁预约系统(源码+数据库+文档)

智能家政保洁预约系统 目录 基于java和vue的智能家政保洁预约系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&#xf…