Не удается получить доступ к внешнему хранилищу на некоторых устройствах Firebase - PullRequest
0 голосов
/ 14 января 2020

У меня есть приложение Android (разработанное под Xamarin. Android), которое отлично работает, когда я тестирую его локально на эмуляторах и физических устройствах. Однако он не работает на двух физических устройствах (Moto G4, API 23 и Huawei Mate 9, API 24), когда проходит автоматическое тестирование c на консоли Google Play. Проблема возникает при попытке создать файл журнала во внешнем хранилище. Я проводил различные тесты под Firebase на Moto G4, но не могу понять, в чем проблема. Я был бы очень признателен, по крайней мере, еще за одну пару глаз за то, что я делаю.

Я проверяю Android.OS.Environment.ExternalStorageState, что возвращает «MediaMounted». Затем я использую GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads), чтобы определить, где создать файл журнала. Это возвращает «/storage/emulated/0/Download». Затем я проверяю, что разрешение на чтение / запись предоставлено. ContextCompat.CheckSelfPermission(this, Android.Manifest.Permission.ReadExternalStorage) и ContextCompat.CheckSelfPermission(this, Android.Manifest.Permission.WriteExternalStorage) оба возвращают Android.Content.PM.Permission.Granted. (В AndroidManifest. xml я перечисляю <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />.)

На данный момент я установил (я думаю), что каталог существует и у меня есть разрешение на запись в него, поэтому я пытаюсь создать мой файл журнала, /storage/emulated/0/Download/LogFile.txt. Это прекрасно работает локально, как на эмуляторах, так и на физических устройствах. Он также работает на большинстве устройств, которые тестирует консоль Google. Однако на Moto G4 (физическое устройство) создание файла завершается неудачно с ошибкой «Не удалось найти часть пути».

Я также попытался записать в DirectoryDocuments вместо DirectoryDownloads, что Документация Android говорит мне, что это «стандартный каталог для размещения документов, созданных пользователем». Путь, возвращаемый для этого /storage/emulated/0/documents. Когда я пытаюсь записать в этот каталог, он не может сказать, что этот каталог не существует (что я считаю истинным). Перечисляя содержимое каталога Download, я заметил, что внутри каталога Download есть каталог «Documents», то есть /storage/emulated/0/Download/Documents. Запись в этот каталог снова дает мне ошибку «не удалось найти часть пути», так же как и запись в сам каталог Download.

Мое приложение обязательно должно где-то хранить файлы (а не только файл журнала) ). Также важно, чтобы пользователь мог копировать эти файлы на устройство и с него, и я не хочу, чтобы файлы были удалены, даже если приложение удалено. По этим причинам я считаю, что внешнее хранилище является для них подходящим (единственным) местом.

Я не знаю, что делать дальше. (Теперь мне интересно, есть ли на самом деле проблема с устройством, например, проблема с форматом диска.) Если у кого-нибудь есть какие-либо предложения относительно того, куда go отсюда, я был бы очень благодарен! Обширные поиски не выявили ничего, что я делаю неправильно, и никаких предположений о том, что структура каталогов на Moto G4 может отличаться.

...