Android (Xamarin) перемещение по дереву папок через URI Storage Access Framework

Пытаясь перемещаться по дереву папок с помощью Storage Access Framework и Uri, я наблюдаю неожиданное поведение. Короче говоря, мой тестовый пример - это двусторонний DocumentFile -> Uri -> DocumentFile -> Uri test. (код предназначен для Xamarin, но это базовые классы Android, поэтому он не должен зависеть от языка.)

void Test(DocumentFile folder)
{
  var uri = folder.Uri;
  //
  // Test case is using an SD card mounted in a card trader in a USB hub.
  // uri: {content://com.android.externalstorage.documents/tree/1111-1111%3ADCIM/document/1111-1111%3ADCIM%2F110ND810}
  //
  var folder2 = DocumentFile.FromTreeUri(context, uri);
  var uri2 = folder2.Uri;
  //
  // uri2: {content://com.android.externalstorage.documents/tree/1111-1111%3ADCIM/document/1111-1111%3ADCIM}
  //
  // At this point I expected uri2 to be equal to uri, but it's not.
  // Instead, uri2 points to the parent of uri
  //
}

Вопрос 1: Мои ожидания здесь оправданы? Не следует ли мне ожидать, что я смогу перемещаться по дереву папок SAF с помощью Uri?

Вопрос 2: Если да, то какой способ решения проблемы?

1 ответ

Следующая библиотека упрощает работу с SAF. Я думаю, вам не следует получать два разных ури!

https://github.com/madnik7/PortableStorage

Другие вопросы по тегам