Мне нужно иметь возможность читать и записывать данные на съемную 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(действие, разрешение.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 с использованием файловой системы?
Спасибо.