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/
1614 0
|
XML 存储 Android开发
解决 Android N 上报错:android.os.FileUriExposedException: file:///storage/emulated/0/
解决 Android N 上报错:android.os.FileUriExposedException: file:///storage/emulated/0/
1646 0
|
IDE Java 开发工具
解决Android Studio安装后运行出错的两个问题:dose not...和Internal error...
1、dose not point to a valid jvm installation出错问题 按照以下方法设置一定可以不会出现这个错误。 我的JDK安装路径如下: C:\Program Files\Java\jdk1.
1377 0
|
Android开发 C++
Android Studio Linking an external C++ project 时候 报Invalid file name. Expected: CMakeLists.txt
Android Studio 右键Linking an external C++ project 时候 报Invalid file name. Expected: CMakeLists.txt错误   查看Android Studio 源码: @Nullable private Stri...
1241 0
|
Android开发 内存技术 存储
Android4: Write Storage权限问题
原文: Android4: Write Storage权限问题 2.3中声明 可以读写SDCARD,包括其他storage,比如内部flash,usb等等 4.
780 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想了一个办法,就是虚拟一个。
2120 0
|
2天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
4天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
6天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。