getExternalStorageDirectory() 和 getDataDirectory() 之间的区别

Rah*_*602 5 java storage android android-sdcard android-external-storage

我正在尝试获取 Android 设备的内部和外部存储路径。

这就是我在大多数设备中获取内部存储路径的方式

Environment.getExternalStorageDirectory().getPath()
Run Code Online (Sandbox Code Playgroud)

上述方法适用于大多数设备,但某些设备此方法会出现问题,即它返回 SD 卡路径。

有人可以告诉我如何准确获取那些Environment.getExternalStorageDirectory().getPath()返回外部存储路径(SD 卡路径)的设备中的内部存储路径。

我也知道,Environment.getDataDirectory().getPath()但此方法返回值类似于/data同一 Environment.getExternalStorageDirectory().getPath()设备返回/storage/sdcard0的值,当 SD 卡不存在时,该值指向内部存储,但当 SD 卡存在时,它会给出指向 SD 卡而不是内部存储的路径。

谁能帮助我理解上述两者之间的区别,并帮助我获取Android设备的内部存储路径?另外,请帮助我找到一个适用于所有设备的解决方案。

编辑:任何认为这篇文章不合适的人请发表评论并让我知道原因,以便我将来牢记这一点。

Com*_*are 4

我指的是通常保存文件的存储,例如 WhatsApp 文件夹、DCIM、下载等。

这就是 Android SDK 所说的外部存储

上述方法适用于大多数设备,但某些设备此方法会出现问题,即它返回 SD 卡路径。

它应该返回 100% Android 设备上的外部存储位置。外部存储是否可移动取决于设备制造商。绝大多数Android 设备都具有永久的不可移动外部存储,通常与设备板载闪存中的内部存储位于同一分区。

有人可以告诉我如何准确获取那些 Environment.getExternalStorageDirectory().getPath() 返回外部存储路径(SD 卡路径)的设备中的内部存储路径。

最有可能的是,不存在这样的路径。

同一设备的Environment.getExternalStorageDirectory().getPath()返回/storage/sdcard0,当SD卡不存在时,它指向内部存储,但当SD卡存在时,它给出指向SD卡而不是内部存储的路径。

的值getExternalStorageDirectory()不应根据某些可移动介质的存在或不存在而变化。如果您的描述准确,那么这是一个有缺陷的设备,您对此无能为力。当然,没有获得“其他”getExternalStorageDirectory()值的标准方法,因为该值不应该改变。

(顺便说一句,你有什么设备有这种行为?)

谁能帮我理解以上两者之间的区别

getDataDirectory()或多或少返回内部存储的根。我说“或多或少”是因为应用程序从未真正使用此目录,而是使用特定于应用程序的子目录(例如,getFilesDir()on Context)。