在阅读了Android存储文件的文档后,我发现外部存储可以包括可移动的SD卡和设备内部的存储,即不可移动的存储。在选择将文件保存到外部存储时,是否有办法区分可移动存储和不可移动存储?
我认为您无法可靠地区分内部存储和外部(SD)存储。
乍一看,似乎可以使用类似于Environment.isExternalStorageRemovable()
的东西,但这并不可靠,因为您的“主要外部”存储设备很可能是设备的内部存储器,而不是SD卡。
Environment.getExternalStorageDirectory()
的文档说明:
注意:不要被这里的“外部”字眼所迷惑。最好将此目录视为媒体/共享存储。它是一个可以容纳相对较大数据量且在所有应用程序之间共享的文件系统(不强制执行权限)。传统上,这是一个SD卡,但也可以实现为设备中与受保护的内部存储不同的内置存储,并且可以在计算机上作为文件系统挂载。
例如,我的LG G4安装了外部SD卡,我可以通过adb看到它(external_SD
):
$ adb shell ls -la /storage/
drwx------ root root 2015-02-28 01:10 USBstorage1
drwx------ root root 2015-02-28 01:10 USBstorage2
drwx------ root root 2015-02-28 01:10 USBstorage3
drwx------ root root 2015-02-28 01:10 USBstorage4
drwx------ root root 2015-02-28 01:10 USBstorage5
drwx------ root root 2015-02-28 01:10 USBstorage6
dr-xr-xr-x root root 2015-02-28 01:10 emulated
drwxrwx--x root sdcard_r 2015-07-31 08:19 external_SD
lrwxrwxrwx root root 2015-02-28 01:10 sdcard0 -> /storage/emulated/legacy
/mnt/sdcard
表示物理SD卡。您可能需要重新考虑您实际想要完成的任务,而不是尝试检测存储类型。 :-)