Android得到的真机的SD卡路径是 /storage/emulated/0/!!!!!!!!!!
在Android系统中,获取真机的SD卡路径需要考虑不同的设备和Android版本。实际上,从Android 10(API级别29)开始,Google推出了Scoped Storage(作用域存储)的概念,对应用程序访问存储的方式进行了重大改变。以下是关于SD卡路径的详细解释和获取方法:
SD卡路径的历史和变化
传统SD卡路径: 在较早的Android版本中,通常可以通过
/mnt/sdcard/
或者/storage/emulated/0/
访问设备的主存储(Internal Storage)或者外部SD卡。Scoped Storage(作用域存储): 从Android 10开始,应用程序访问存储的方式发生了重大变化:
- 外部存储访问限制:应用程序默认只能访问自己的私有目录和共享存储空间,不能直接访问其他应用程序的私有目录或者外部存储的根目录。
- 特定存储目录:应用可以通过特定的存储目录访问共享文件,如
MediaStore
和Downloads
。
获取SD卡路径的方法:
在Scoped Storage的环境中,获取SD卡路径变得更加复杂,通常推荐使用以下方法:
javaFile[] externalStorageVolumes = ContextCompat.getExternalFilesDirs(context, null); String sdCardPath = externalStorageVolumes[0].getAbsolutePath().split("/Android")[0];
ContextCompat.getExternalFilesDirs(context, null)
返回一个File数组,包含所有外部存储设备的路径。externalStorageVolumes[0]
通常是主要的外部存储设备路径。.split("/Android")[0]
可以获取设备的根路径,例如/storage/emulated/0/
。
注意事项:
- 适配不同设备:不同设备的存储路径可能有所不同,需要进行适配。
- 权限问题:获取外部存储路径需要适当的权限,如
READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
。 - Scoped Storage的变更:应用开发者应该考虑到Scoped Storage对文件访问的限制和变更。
通过以上方法,可以在Android设备上获取到正确的SD卡路径,适应了最新的Scoped Storage和旧版Android系统的差异。