给定 aFile
或 a Uri
,我如何可靠地确定文件是否位于连接到手机 USB 端口的 USB 大容量存储设备上?
我的测试手机是三星 Galaxy S7 Edge,它连接了一个 USB 大容量存储设备、一个内部(物理)微型 SD 卡和内部存储。当我查询时Context.getExternalCacheDirs()
,我看到所有三个:
/storage/emulated/0/Android/data/...
/storage/A2B3-15F3/Android/data/...
/storage/3535-3038/Android/data/...
如何确定哪一个是 USB 大容量存储设备?(顺便说一句,它是 A2B3-15F3)。
研究
我查看了这个答案(StorageHelper.resolveType()
方法),但如您所见,设备的挂载文件路径不包含字符串“usb”。
然后我尝试使用该StorageManager
服务。使用上面的设备,我们可以使用以下方法获取 StorageVolume`:
StorageManager storageManager = context.getSystemService(StorageManager.class);
StorageVolume volume = storageManager.getStorageVolume(context.getExternalCacheDirs()[1]);
这就是事情变得有点奇怪的地方。StorageVolume
API 文档和我在 Android 25 源中的文件的本地副本似乎对我没有太大帮助,但是当我在 Android Studio 调试器中执行上述代码时,该对象包含一个mSubSystem
将上述三个设备描述为的字段“保险丝”,“usb”和“sd”分别。这是一个例子:
为什么我在调试器中看到此信息,而不是源代码?此字段是否特定于此特定手机的 Android 发行版?