我正在使用StorageVolume
API来跟踪SDCard
和USBStorage
的URI
StorageManager storageManager = (StorageManager) getSystemService(STORAGE_SERVICE);
for (StorageVolume storageVolume : storageManager.getStorageVolumes())
{
if (!storageVolume.isPrimary())
{
Intent accessIntent = storageVolume.createAccessIntent(null);
startActivityForResult(accessIntent, 11);
}
}
在onActivityResult
中,我可以检索URI,将其保存到SharedPreferences
并获取Persisting Permission
。问题是我无法区分SDCard
的URI和USBStorage
的URI。它也适用于从Storage Access Framework
返回的URI。我怎么能真正知道用户确实选择了预期的存储而不是错误的存储。
尝试过的事情
createAccessIntent
发送一些数据,但是没有
能够检索onActivityResult
中的值。只是想知道
这就是为什么它没有我付给Intent
返回的createAccessIntent
的附加功能的原因。context.getExternalFilesDirs(null)[]
,但是它为null
项目返回了SDCard
。我还检查了已安装的SDCard
的状态。显然,我从用户那里获得了存储的运行时权限。storageManager.getStorageVolumes()
首先返回USBStorage
的所有外部存储的列表,就像它在我的设备上一样,但不是在所有设备上一样。它会随机列出项目。Environment.getRootDirectory()
之类的黑客工具,并获取其父文件并导航至根文件夹上的SDCard
,但它仅返回SDCard
挂载点的子元素。和USBStorage
上的Marshmellow
除外。我的意思是,它仅在Nougat
+个设备上返回null。