Как записать на SDCard файлы, которые не будут удалены при удалении приложения - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно иметь возможность читать и записывать данные на съемную SDCard, чтобы они не были удалены при удалении приложения.Много данных!

У меня есть приложение, которое работает с более чем 50 000 файлов, 10 ГБ (в основном изображения и видео).Эти данные первоначально загружаются непосредственно на SDCard с помощью адаптера SD в ПК, а затем регулярно обновляются (небольшое количество файлов) через FTP на устройстве Android.(В разных странах есть небольшая группа пользователей.)

Все это работает очень хорошо, если я использую getExternalFilesDirs () и Environment.isExternalStorageRemovable (file) для помещения данных на внешнюю SDCard.Пример пути: - /storage/1234-5678/Android/data.com.me.myapp/files/MyDataDirectory

Однако иногда пользователю необходимо удалить и переустановить приложение.В этом случае все данные уничтожаются, и для восстановления, если SDCard подключена к ПК, требуется несколько часов, а для восстановления через FTP - несколько дней.

Я могу поместить все файлы в верхнюю частьвыровняйте каталог на SDCard и прочитайте их.Приложение работает нормально, и файлы не будут удалены при удалении.Но обновление FTP завершается неудачно, и на любом устройстве не разрешается запись в SDCard.

Приложение использует ActivityCompat.requestPermissions (activity, android.Manifest.permission.WRITE_EXTERNAL_STORAGE, 101) для получения разрешения от пользователя.

ContextCompat.checkSelfPermission (act ,missions.WRITE_EXTERNAL_STORAGE) возвращает PackageManager.PERMISSION_GRANTED после того, как это было сделано.

Я был бы весьма рад записать мои данные в подкаталог общедоступного каталога, например ... File externalPublicDir = Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES);

Однако: - Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES) всегда возвращает путь к внутренней памяти.Не съемная SDCard.Мои данные слишком велики, чтобы это было приемлемо.

Все это прекрасно работало до KitKat, используя каталог верхнего уровня на SDCard, но прогрессивные меры безопасности заблокировали простые решения.Сейчас я использую Nougat на всех устройствах, на которых запущено приложение.

Камера устройства, кажется, помещает фотографии в общедоступный каталог на SDCard, чтобы это можно было сделать.

Я создал решениеиспользуя Storage Access Framework, но это очень и очень медленно.

Может кто-нибудь предложить способ записи в общий каталог на SDCard с использованием файловой системы?

Спасибо.

...