Android本地存储目录研究

Android Content URI解析:应对分区存储与厂商文件管理器的兼容性挑战 在Android开发中,文件访问是一个基础且关键的技术环节。随着Android系统权限模型的演进,特别是分区存储(Scoped Storage)的引入,传统的基于绝对路径的文件操作方式发生了根本性变化。其核心原理是通过Content URI机制,将文件访问抽象为基于URI的权限令牌,从而在保障用户隐私安全的前提下,实现跨应用数据共享。这一转变带来了显著的技术价值:应用无需申请宽泛的存储权限即可访问用户授权的特定文件,同时系统能更好地管理文件生命周期。然而,在实际工程实践中,尤其是在处理用户通过系统文件管理器 阅读详情

背景
所有Android设备都有两个文件存储区域:内部存储和外部存储

尽管app默认安装在内部存储中,但可以在manifest文件中指定 android:installLocation 的属性,这样app便可安装在在外部存储中。当 APK 非常大且它们的外部存储空间大于内部存储时,用户更青睐这个选择。本篇文章针对的三星手机的目录,其他厂商的手机可能略有不同,请注意。

内部存储
- 它总是可用可访问的。
- 默认情况下只有你的应用可以访问此处保存的文件。
- 当用户卸载你的应用时,系统会从内部存储中删除您的应用的所有文件。
- 当您希望确保用户或其他应用均无法访问您的文件时,内部存储是最佳选择。
方法与路径:getFilesDir() (/data/data/com.zyou.test2/files)需要root
结果:此时手机未插入sdcard,可以看到内部存储的目录在根目录下的data/data/包名/


外部存储
- 它并非始终可用,因为用户可采用 USB 存储的形式装载外部存储,并在某些情况下会从设备中将其删除。
- 它是全局可读的,因此此处保存的文件可能被其他应用读取。
- 当用户卸载你的应用时,只有在你通过 getExternalFilesDir() 将你的应用的文件保存在目录中时,系统才会从此处删除您的应用的文件。
- 对于无需访问限制以及你希望与其他应用共享或允许用户使用电脑访问的文件,外部存储是最佳位置。
使用外部存储记得加上访问权限:

方法与路径:getExternalFilesDir(“ff”)(/storage/emulated/0/Android/data/com.zyou.test/files/ff)
结果:我们先来看看storage/emulated/0/ 原来这里就是外部存储目录,我们用手机自带的“我的文件”APP可以直接访问,并且我们发现许多常用的目录都在这里,比如Download Picture DCIM Documents Movies Music等。


其他存储区域
/storage/emulated/0
方法与路径:Environment.getExternalStorageDirectory() /storage/emulated/0
结果:这样子我们就能自由地访问外部存储/storage/emulated/0下的其他区域

/storage/emulated/0/Download
方法与路径:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) /storage/emulated/0/Download
结果:这是公共存储区域,那么获取Picture,Documents,Music,Movies都是一样的方法;

/system
方法与路径:Environment.getRootDirectory() /system
结论:通过这个方法可以获取整个存储的顶级目录下的system目录,我觉得APP没有必要存储数据到这个地方了,最高存储地应该是/storage/emulated/0

/data/app/com.zyou.test2-2/base.apk
方法与路径:getPackageCodePath() /data/app/com.zyou.test2-2/base.apk
结论:返回android 安装包的完整路径,这个包是一个zip的压缩文件,它包括应用程序的代码和assets文件。


注意事项
1.在访问外部存储时,必须使用以下方法先判断外部存储是否存在。
if(Environment.getExternalStorageState().equals(Environment. MEDIA_MOUNTED)){ }

2.当您希望确保用户或其他应用均无法访问您的文件时,内部存储是最佳选择;对于无需访问限制以及你希望与其他应用共享或允许用户使用电脑访问的文件,外部存储是最佳位置。

3.访问权限设置
Context.MODE_PRIVATE = 0 : 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND = 32768 :模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE = 1 :表示当前文件可以被其他应用读取;
Context.MODE_WORLD_WRITEABLE = 2 :表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入: openFileOutput(“itcast.txt”, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

Android开发实战:content:// URI转文件路径的兼容性处理与避坑指南 在Android开发中,文件访问是常见的需求,涉及文件上传、预览、分享等场景。Android系统基于沙盒安全模型,通过content:// URI机制实现应用间安全的文件共享,而非直接暴露文件系统路径。其核心原理是通过ContentResolver解析URI,获取文件描述符或输入流,从而在严格权限控制下访问文件。这一机制在保障安全的同时,也带来了技术挑战,尤其是在处理不同厂商文件管理器返回的多样化URI格式时。本文聚焦于content:// URI到真实文件路径的转换,深入剖析了Android文件访问框架, 阅读详情

相关推荐

Android WebView安全加载本地文件:file://与content://协议全解析

在移动混合开发中,WebView作为连接原生与Web技术的桥梁,其安全加载本地文件是常见需求。理解浏览器同源策略与Android沙盒安全模型是基础,前者限制不同源脚本间的资源访问,后者则通过文件权限控制保障应用数据隔离。随着Android系统版本升级,安全策略收紧,file://协议在Android 7.0+受限,开发者需转向content://协议并通过FileProvider安全共享文件。然而,content://协议在WebView中会引发JavaScript跨域访问难题,影响本地资源加载与页面功能。

weixin_29192365的博客 5万+

开源密码管理器Puff-Android:端到端加密与可审计安全的安卓实践

密码管理器是现代数字身份安全的核心工具,其核心原理在于通过加密算法将用户的密码凭证安全存储。端到端加密技术确保了数据在本地加密后才进行传输与同步,服务器仅处理密文,从根源上杜绝了数据泄露风险。这项技术的核心价值在于将密码安全从依赖个人记忆和重复使用的脆弱习惯,转变为基于密码学与自动化填充的工程化方案。在应用场景上,它尤其适用于管理日益增多的在线账户,并为开发者与安全爱好者提供了代码可审计的透明基础。开源密码管理器如Puff-Android,通过公开其全部源代码,将端到端加密与可审计性相结合,允许社区共同审查

weixin_30435261的博客 394

微信聊天记录安全备份实战:从本地存储原理到可读HTML导出

数据备份是信息安全与数字资产管理的基础实践,其核心在于确保数据的完整性、可用性与可控性。在移动互联网时代,即时通讯数据已成为个人与组织的关键数字资产。理解其本地存储原理,特别是SQLite数据库的加密机制,是实现自主可控备份的技术前提。通过掌握ADB工具链与数据库解密方法,可以将加密的聊天记录转换为可离线浏览的HTML等通用格式,从而摆脱对单一官方备份通道的依赖。这种技术方案尤其适用于需要长期归档、司法取证或跨平台查阅的重要对话记录,为微信聊天记录这类高频、高价值数据提供了除云同步外的可靠本地化存档路径,有

weixin_33885676的博客 366

FileProvider共享文件

1.配置fileProvider <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.php.demo.FileProvider" android:exported="false...

qq_36755922的博客 18万+

安卓面试题_安卓开发面经_Android面经(21/30)之序列化全解析

序列化问的问题不算多,掌握以下几个基本就够了

a763450633的博客 379

[LaTeX] 调整参考文献的格式(References),包括作者名缩写,行距,字体,引用顺序等等

在此记录我对LaTeX中参考文献references的尝试,主要涵盖如题几个方面。

the Blog of 等不到天亮丶等时光 4万+

FileProvider文件共享

本文是在查看Android文档关于拍照与文件共享知识,看到关于FileProvider相关内容后,尝试使用并遇到一些问题时决定做的笔记。 一、FileProvider 1.FileProvider的出现 Android7.0之前,使用file://URI通常会给出该文件的全部访问权限,这是不安全的,应该只有应用自己才有权限。在7.0之后,为了更好的保护用户隐私,不再使用file://URI来

dapangzao的专栏 8万+

从转发时钟到嵌入式时钟:CDR、CTLE与DFE在高速串行链路中的协同演进

本文深入探讨了高速串行链路中CDR、CTLE与DFE技术的协同演进。从转发时钟到嵌入式时钟的转变,详细分析了CDR的工作原理与实现架构,以及CTLE和DFE在信道损耗补偿和ISI干扰消除中的关键作用。通过实战案例展示了这些技术在28Gbps至112Gbps SerDes设计中的优化策略与性能提升。

weixin_42539414的博客 297

android 设置存储目录,Android本地存储目录研究

背景所有Android设备都有两个文件存储区域:内部存储和外部存储尽管app默认安装在内部存储中,但可以在manifest文件中指定 android:installLocation 的属性,这样app便可安装在在外部存储中。当 APK 非常大且它们的外部存储空间大于内部存储时,用户更青睐这个选择。本篇文章针对的三星手机的目录,其他厂商的手机可能略有不同,请注意。内部存储它总是可用可访问的。默认情况...

weixin_33940031的博客 2558

Tessent ICL语法详解:如何高效定义SIB、TDR和TAP模块

本文深入解析Tessent ICL语法,指导如何高效定义SIB、TDR和TAP模块以构建芯片测试网络。通过实战代码示例,详细阐述了各模块的端口声明、接口角色与核心寄存器定义,并提供了顶层集成连接方法与调试技巧,帮助DFT工程师精准描述测试仪器拓扑,提升Tessent工具链使用效率。

silver的专栏 493

wpf入门第五篇 WPF with ECharts

前言 本文是wpf入门系列第五篇,面向有winform或者web前端基础的、并且也有C#基础的同学。 ECharts是百度团队开发的开源免费的js图表控件库,非常强大,文档齐全。WPF中使用图表,除了可以选择devexpress或者oxyplot之类的专为wpf开发的图表控件之外,还可以考虑使用 WebBrowser+ECharts 来完成复杂的图表展示,其展示效果不亚于前者。 本文介绍了 WP...

wf824284257的博客 1万+

LokiBoard 安卓键盘记录器使用手册

LokiBoard 安卓键盘记录器使用手册 项目介绍 LokiBoard 是一个专为安卓系统设计的键盘记录工具,由开发者 IceWreck 创建并维护。它作为一个替代输入法存在,能够在本地存储用户的按键日志,而不会将任何数据发送到远程服务器。此项目基于安卓开放源代码项目(AOSP)的键盘组件开发,旨在作为技术概念验证,并强调非恶意用途。用户可以通过访问内部存储特定路径来查看日志文件,确保了对数据的...

gitblog_00556的博客 1320

为什么reg2cgate的setup难以满足?

从图上我们可以看出,clock gate的clock latency是delay1,reg1的clock latency是delay1+delay2,可以明显的看出,reg2cgate的setup,其launch clock path delay天生是要比capture clock path delay要多delay2的,因此其setup相对于reg2reg是不好满足的。因此,在数字后端脚本、flow上比较擅长,大家如果有相关的问题,可以提供答疑咨询服务。因此,能够让我们去处理的就是delay2的值。

芯冰乐 1935

基于安卓Android的掌上党支部--党员系统APP-毕业设计

随着移动互联网技术的快速发展,智能手机已经成为人们日常生活中不可或缺的一部分。为了更好地服务党员,提高党建工作的效率和质量,本文提出了一款基于安卓平台的掌上党支部——党员APP。该APP集成了党员信息管理、活动报名与管理、党史教育、学习打卡管理等功能,旨在打造一个便捷、高效、互动的党员服务平台。

QQ1963288475的博客 1526

【GEOS-Chem模拟教程第二期上】生物质燃烧排放 GFED4 数据配置

生物质燃烧排放 GFED4 数据配置

WW、forever的博客 1301

光通量与辐射通量之间的换算

由理论和实验可知存在两种定义: 1W1W1W(瓦特)的频率为540×1012Hz540\times10^{12}Hz540×1012Hz(赫兹)的单色辐射的辐射通量等于683lm(流明)683lm(流明)683lm(流明).。 1lm1lm1lm的频率为540×1012Hz540\times10^{12}Hz540×1012Hz的单色通量等于1683=0.001464W\frac{1}{683}=0.001464W6831​=0.001464W。 从上述定义中我们可以得到什么呢?我们知道光速: c=3×

u011699626的博客 3273

基于安卓的云笔记系统

本文设计实现了一款基于安卓的云笔记系统,采用MVVM架构结合SpringBoot和MySQL技术栈。系统支持多方式注册登录、富文本编辑、附件上传、版本回溯等核心功能,并集成社交分享、活动管理、论坛交流等扩展模块。技术实现上采用阿里云OSS存储和HTTPS加密保障数据安全,测试显示系统支持2000用户并发访问。研究解决了传统笔记的跨设备同步与社交协作痛点,未来将引入AI智能分类和分布式缓存技术进行优化。开发环境为Java+SpringBoot+MySQL5.7,采用混合开发模式实现安卓客户端。

QQ80213251的博客 750

1、Ka频段双极化低剖面卫通相控阵天线

设计了双馈口叠层十字缝隙耦合天线,采用“双线极化天线 +旋转馈电 + 移相控制”架构,采用双馈口的叠层十字缝隙耦合天线,并以 2 x2 阵列为主体,旋转排布实现二次圆极化,同时极化可切换,通过多层 PCB 工艺实现天线层、控制/电源层功分网终层、芯片层一体化集成,研制出 64 阵元的圆极化可切换发射天线,测试结果表明:天线工作 频段为 27.5 ~31 GHz,可实现60°扫描,法向轴比

qq_43416206的博客 4370

基于安卓Android的校园失物招领app-毕业设计

随着移动互联网技术的快速发展和智能手机的普及,校园生活也逐渐向着信息化、便捷化的方向发展。失物招领作为校园生活的一个重要组成部分,传统的人工登记和公告栏方式已经不能满足现代大学生的需求。

QQ511008285的博客 853

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SmolChat-Android:在安卓设备上实现本地AI模型推理的终极指南

在移动设备上运行AI模型一直是技术爱好者的梦想——无需网络连接、数据隐私完全自主、随时随地获得智能助手服务。SmolChat-Android正是这样一个革命性的开源项目,它让你能够在安卓手机上直接运行各种GGUF格式的小型语言模型,实现完全本地的AI对话体验。这个项目不仅解决了移动端AI推理的技术难题,更为开发者提供了一个简洁、可扩展的代码库,让任何人都能轻松构建自己的移动AI应用。 ## 🔥

gitblog_00420的博客 476

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

基于安卓Android的旅游攻略APP系统-毕业设计

随着移动互联网技术的蓬勃发展,旅游业迎来了前所未有的变革。为了满足广大旅行爱好者对旅游攻略的即时需求,本文设计并实现了一款基于Android系统的旅游攻略APP。

QQ1963288475的博客 1851

基于uniapp+安卓的考研助手app

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。数据库 mysql 版本不限数据库工具:Navicat/SQLyog等都可以小程序端运行软件 微信开发者工具/hbuiderx(1)微信开发者工具: 提供小程序开发、调试、发布等功能,用于前端开发。(2)Node.js/java/python/php: 用于后端服务搭建和逻辑处理。(3)MySQL/MongoDB: 用于数据存储和管理,设计合适的数据库结构。

bishe288的博客 1485

基于安卓Android的高校教师答疑APP系统-毕业设计

随着移动信息技术的快速发展和智能手机的广泛普及,高校教育模式正逐步向数字化、智能化转型。答疑作为高校教学中的重要环节,其效率与质量直接关系到学生的学习效果与满意度。

QQ1963288475的博客 862

gh_mirrors/dou/douyin核心功能揭秘:自动过滤高赞视频与本地存储方案

gh_mirrors/dou/douyin是一款基于Golang和ADB技术的抖音视频爬虫方案,能够帮助用户自动抓取推荐页和搜索页的视频内容,并提供智能过滤与本地存储功能。本文将深入解析其两大核心功能:高赞视频自动过滤系统和高效本地存储方案,让你轻松获取优质视频资源。 ## 一、智能筛选:自动过滤高赞视频的工作原理 ### 1.1 广告识别与过滤机制 系统内置广告识别算法,通过检测视频的`Is

gitblog_00558的博客 882

VCAM虚拟相机怎么用?3分钟上手这款安卓虚拟摄像头工具

你有没有遇到过这样的瞬间:直播开到一半,画面里突然闯进一只猫;视频会议正讲到关键处,身后的快递堆暴露了居家办公的真相;或者你是个开发者,想测试相机功能,却发现测试机上连摄像头都没有。如果手机镜头能像切换壁纸一样"说换就换",这些尴尬是不是瞬间清零?基于Xposed框架的安卓虚拟摄像头工具——VCAM虚拟相机,就是为此而生的:它支持安卓5.0以上系统,无需修改系统包,就能让直播、会议、测试等场景里的

gitblog_00167的博客 1039

安卓虚拟摄像头怎么实现?用Xposed Hook在3个关键位置偷换视频流

安卓虚拟摄像头,听起来很玄乎,其实目标就一句话:让别的应用把一段视频当成摄像头画面。本文围绕Xposed Hook机制,从拦截点的选择、视频数据的输送,再到部署和排坑,把虚拟摄像头的实现思路完整讲透。就算你之前没写过任何 Hook 代码,读完后也能对这套"偷梁换柱"的玩法心中有数。 ## 先还原一个让人抓狂的测试现场 假设你在做直播类 App 的测试:需要反复验证不同分辨率、不同光线下"美颜滤

gitblog_00886的博客 961
上一篇: Java基础--Android中泛型的应用(二)
下一篇: Android开发中常犯的错误
A_xun_A
博客等级 码龄17年 10粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值