Android Internal和External Storage

简介: Android Internal和External Storage

Internal和External Storage

所有的Android设备都有两个文件存储区域:Internal Storage和 External Storage.

名字产生背景

早期的Android设备是由一个内置不可变的,手机都内置(Permanent)一块较小存储板即Internal Storage和一个可移(Removable)的,外置的存储媒介(External Storage,比如SD卡)组成的.

现在有的设备只有一个存储区域,他们将将最初定的“Internal Storage”,即内置存储,分成Internal和External两个分区,这样就不管什么设备都会统一有Internal和External两个分区.

API的行为也就跟是否有可移除的存储媒介无关了.这两总分区的特点总结如下:

区别 Internal storage External storage
可见性 一直可见 不总是可见,mount了就可见,remove了就不可见
访问权限 保存在这里的文件默认只有对应app才能访问 其他app共享
卸载表现 保存在此的与app相关的文件会被删除 保存在这里的文件除了在getExternalFilesDir()和getExternalCacheDir()文件夹之外,都会保留
权限 无需 需 WRITE_EXTERNAL_STORAGE权限 (注意:getExternalFilesDir()和getExternalCacheDir()这两个路径无需权限)
适用条件 app私有数据 存放的数据不需要访问限制,为了分享数据或允许其他用户访问

使用贴士

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/应用包名/files/ 目录,一般放一些长时间保存的数据

通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/应用包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项

一些路径的标准写法

Environment.getExternalStorageDirectory() = /mnt/sdcard

context.getExternalFilesDir() = /mnt/sdcard/Android/data/<application package>/files

context.getExternalCacheDir() = /mnt/sdcard/Android/data/<application package>/cache

context.getFilesDir() = /data/data/<application package>/files

context.getCacheDir() = /data/data/<application package>/cache


相关文章
|
存储 缓存 Linux
Android内、外存储分区&常用存储目录,getExternalStorageDirectory获取的是storage/emulated/0/
Android内、外存储分区&常用存储目录,getExternalStorageDirectory获取的是storage/emulated/0/
1349 0
|
XML 存储 Android开发
解决 Android N 上报错:android.os.FileUriExposedException: file:///storage/emulated/0/
解决 Android N 上报错:android.os.FileUriExposedException: file:///storage/emulated/0/
1479 0
|
IDE Java 开发工具
解决Android Studio安装后运行出错的两个问题:dose not...和Internal error...
1、dose not point to a valid jvm installation出错问题 按照以下方法设置一定可以不会出现这个错误。 我的JDK安装路径如下: C:\Program Files\Java\jdk1.
1320 0
|
Android开发 内存技术 存储
Android4: Write Storage权限问题
原文: Android4: Write Storage权限问题 2.3中声明 可以读写SDCARD,包括其他storage,比如内部flash,usb等等 4.
746 0
|
Java Shell Linux
我的Android进阶之旅------&gt;/storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别
转自:http://bbs.gfan.com/android-5382920-1-1.html 关于android的4.2的0文件夹的详解---- android 4.0 ----在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd卡上,然而gn是没有sd卡的,所以google想了一个办法,就是虚拟一个。
2041 0
|
6天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
29天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
3天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
20天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。