你说:
第一个问题是我检查是否安装了 SD 卡。即使没有插入 SD 卡,此函数也会返回 true。
我认为您偶然发现了一些需要一些时间才能掌握的东西,因为它根本不是很清楚。
在 Android 中,你会发现 2 种内存:
- 系统一,始终可用,高度安全:您的应用程序只能访问专用于您的一小部分,其他应用程序无法读取您的数据。
- 共享的,通常称为公共的、外部的或“sdcard”。每个应用程序都具有对所有内容的读/写访问权限。但它并不总是可用的,因为您可以将它“挂载”在您的计算机上,从而在 android 中卸载它并因此隐藏它。(但仅在 android 3.X 之前)。
您会在野外找到 3 种设备:
- 在某些设备上,此共享内存位于焊接在设备内部的芯片上。所以名称 sdcard 是不够的。但是,路径可能是“/sdcard”
- 在其他设备上,此共享内存位于您可以删除的真实 SD 卡上。
- 在其他一些设备上,此内存的一部分位于芯片上,另一部分位于您的 SD 卡上。
根据你所说的,我认为你是第三种设备。因此,您的物理 sdcard 将在这种路径中找到:/mnt/sdcard/external_sd/
. 可悲的是,这是特定于设备的,我认为 Android API 中没有任何东西可以获取此路径。
另外,请记住,从 Android 3.X 开始,我们不再需要“挂载”这个共享内存。因此,您的共享内存将始终存在于 Android 中,因为我们现在使用的是 MTP 协议。
这就是 isExternalStorageAvailable() 返回 true 的原因,即使您的 sdcard 已被移除。