android 获取系统默认路径

转:http://blog.youkuaiyun.com/zhengdan66/article/details/8930252

Environment.getDataDirectory().getPath() : /data
Environment.getDownloadCacheDirectory().getPath()  : /cache
Environment.getExternalStorageDirectory().getPath(): /mnt/sdcard
Environment.getRootDirectory().getPath()           : /system
Context.getCacheDir().getPath()                    : /data/data/com.zhd/cache
Context.getExternalCacheDir().getPath()            : /mnt/sdcard/Android/data/com.zhd/cache
Context.getFilesDir().getPath()                    : /data/data/com.zhd/files
Context.getObbDir().getPath()                      : /mnt/sdcard/Android/obb/com.zhd
Context.getPackageName()                           : com.zhd
Context.getPackageCodePath()                       : /data/app/com.zhd-1.apk
Context.getPackageResourcePath()                   : /data/app/com.zhd-1.apk

<think> 我们正在讨论Android系统中SD卡的默认路径。根据Android系统的版本和不同的设备制造商,SD卡的路径可能有所不同。不过,我们可以提供一些常见的路径。 在Android系统中,外部存储(通常指SD卡)的路径可以通过环境变量`MEDIA_STORAGE`或者标准目录来获取。常见的路径有: 1. 在较早的Android版本中(例如Android 4.4及之前),SD卡的路径可能是`/mnt/sdcard`或者`/sdcard`。 2. 从Android 4.4(KitKat)开始,引入了多用户外部存储,路径变为`/storage/emulated/0`(针对主用户)和`/storage/sdcard0`(有些设备)等。同时,物理SD卡(可移动存储)的路径可能是`/storage/sdcard1`或者`/storage/extSdCard`(不同厂商可能不同)。 3. 另外,系统还提供了标准的环境变量`EXTERNAL_STORAGE`,它指向主外部存储目录(通常是内置存储)。而`SECONDARY_STORAGE`可能指向额外的外部存储(如物理SD卡),但并不是所有设备都支持。 在代码中,我们可以使用以下方法获取: - 获取外部存储目录(内置存储)的路径:`Environment.getExternalStorageDirectory()`,这个方法返回的是内置存储的根目录,在较新版本中,这个目录通常是`/storage/emulated/0`或`/sdcard`(符号链接)。 - 对于可移动的SD卡,没有标准的API直接获取,但可以通过遍历`/storage`目录下的文件夹或者使用`Environment.getExternalStorageState()`和`getExternalFilesDirs()`等方法来获取多个存储位置。 因此,默认的内置SD卡(实际上是内置存储,用户通常称之为SD卡)路径通常是: - `/sdcard`(这是一个符号链接,指向实际路径) - 实际路径可能是`/storage/emulated/0`(对于主用户)或者`/mnt/shell/emulated/0`(内部实现,但通常用户不可见) 但是请注意,物理可插拔的SD卡路径则因设备而异,常见的有: - `/storage/extSdCard` (三星设备) - `/storage/sdcard1` (一些其他设备) 由于碎片化问题,最好使用系统API来获取标准的外部存储目录,而对于可移动的SD卡,则需要使用`Context.getExternalFilesDirs()`或`Context.getExternalMediaDirs()`来获取所有外部存储的路径,然后通过判断来找到可移动SD卡的路径。 总结:内置存储(通常被认为是默认的SD卡)的默认路径是`/storage/emulated/0`(主用户),但通过符号链接`/sdcard`也可以访问。物理SD卡的路径则没有统一标准。 §§相关问题§§ 1. 如何在Android代码中获取内置存储和扩展SD卡的路径? 2. Android不同版本中外部存储路径的变化? 3. 为什么Android没有统一的SD卡路径? </think> 在Android系统中,SD卡的默认路径系统版本和设备制造商而异,但以下是通用规则: ### 📌 核心路径说明 1. **内置存储(通常称为SD卡)** - 主路径:`/storage/emulated/0`(Android 4.4+) - 兼容路径:`/sdcard`(符号链接指向实际路径)[^1] - 程序访问路径:`Environment.getExternalStorageDirectory()`(返回类似`/storage/emulated/0`) 2. **外部物理SD卡(可拆卸存储)** - 常见路径: - `/storage/sdcard1`(通用方案) - `/storage/extSdCard`(三星设备) - `/storage/removable/sdcard1`(部分设备) - 程序访问:需通过`Context.getExternalFilesDirs()`遍历多个存储卷[^2] ### ⚠️ 关键注意事项 1. **Android版本差异** - KitKat(4.4)前:直接使用`/mnt/sdcard` - Lollipop(5.0+):引入存储访问框架(SAF),路径访问受限 - Android 10+:强制启用分区存储(Scoped Storage) 2. **设备厂商自定义** - 华为/荣耀:可能包含`/Huawei`前缀 - 小米:`/MIUI`文件夹常见 - 物理SD卡路径需通过`StorageManager.getStorageVolumes()`动态获取 3. **代码获取最佳实践** ```java // 获取主存储路径(内置) File internalPath = Environment.getExternalStorageDirectory(); // 获取所有外部存储(含物理SD卡) File[] externalPaths = Context.getExternalFilesDirs(null); for (File path : externalPaths) { if (!path.equals(internalPath)) { // 物理SD卡路径 } } ``` > 📌提示:直接硬编码路径存在兼容风险,建议始终使用系统API访问存储[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值