Android得到的真机的SD卡路径是 /storage/emulated/0/!!!!!!!!!!

在Android系统中,获取真机的SD卡路径需要考虑不同的设备和Android版本。实际上,从Android 10(API级别29)开始,Google推出了Scoped Storage(作用域存储)的概念,对应用程序访问存储的方式进行了重大改变。以下是关于SD卡路径的详细解释和获取方法:

SD卡路径的历史和变化

  1. 传统SD卡路径: 在较早的Android版本中,通常可以通过 /mnt/sdcard/ 或者 /storage/emulated/0/ 访问设备的主存储(Internal Storage)或者外部SD卡。

  2. Scoped Storage(作用域存储): 从Android 10开始,应用程序访问存储的方式发生了重大变化:

    • 外部存储访问限制:应用程序默认只能访问自己的私有目录和共享存储空间,不能直接访问其他应用程序的私有目录或者外部存储的根目录。
    • 特定存储目录:应用可以通过特定的存储目录访问共享文件,如MediaStoreDownloads
  3. 获取SD卡路径的方法

    在Scoped Storage的环境中,获取SD卡路径变得更加复杂,通常推荐使用以下方法:

    java
    File[] 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/
  4. 注意事项

    • 适配不同设备:不同设备的存储路径可能有所不同,需要进行适配。
    • 权限问题:获取外部存储路径需要适当的权限,如 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
    • Scoped Storage的变更:应用开发者应该考虑到Scoped Storage对文件访问的限制和变更。

通过以上方法,可以在Android设备上获取到正确的SD卡路径,适应了最新的Scoped Storage和旧版Android系统的差异。