Android外置存储与SD卡

时间:2015-08-01 03:25:57

标签: android storage

在阅读有关存储文件的Android文档后,我发现外部存储可以同时包含可移动的SD卡和设备内部的存储,即不可移动。在选择将文件保存到外部存储时,有没有办法区分可移动存储和不可移动存储?

1 个答案:

答案 0 :(得分:5)

我认为您无法可靠地区分内部和外部(SD)存储。

乍一看,您似乎可以使用类似Environment.isExternalStorageRemovable()的内容,但这不可靠,因为您的“主外部”存储设备很可能是设备的内部存储器,而不是SD卡。 / p>

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

但是,外部存储的各种API返回值,证明设备使用内部存储器作为其“主要外部”存储:

  • Environment.getExternalStorageState:已安装
  • Environment.isExternalStorageEmulated: true
  • Environment.isExternalStorageRemovable: false
  • Context.getExternalCacheDir:/ storage / emulated /0/Android/data/com.codeblast.storagetype/cache
  • Context.getExternalFilesDir:/ storage / emulated /0/Android/data/com.codeblast.storagetype/files

在没有外部SD卡的模拟器上运行代码会返回完全相同的结果。

因此,您无法假设/mnt/sdcard表示物理SD卡。

您可能已经重新考虑了您实际尝试完成的工作,而不是尝试检测存储类型。 : - )