从SAF或StorageVolume API返回的USBStorage URI中区分SDCard URI

时间:2018-12-19 06:16:20

标签: android android-sdcard android-external-storage usb-otg storage-access-framework

我正在使用StorageVolume API来跟踪SDCardUSBStorage的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。我怎么能真正知道用户确实选择了预期的存储而不是错误的存储。

尝试过的事情

  1. 我尝试用createAccessIntent发送一些数据,但是没有 能够检索onActivityResult中的值。只是想知道 这就是为什么它没有我付给Intent返回的createAccessIntent的附加功能的原因。
  2. 我尝试进行context.getExternalFilesDirs(null)[],但是它为null项目返回了SDCard。我还检查了已安装的SDCard的状态。显然,我从用户那里获得了存储的运行时权限。
  3. 试图假定storageManager.getStorageVolumes()首先返回USBStorage的所有外部存储的列表,就像它在我的设备上一样,但不是在所有设备上一样。它会随机列出项目。
  4. 我还尝试过使用Environment.getRootDirectory()之类的黑客工具,并获取其父文件并导航至根文件夹上的SDCard,但它仅返回SDCard挂载点的子元素。和USBStorage上的Marshmellow除外。我的意思是,它仅在Nougat +个设备上返回null。

0 个答案:

没有答案