Как известно, в Android Q (API=29) Google в очередной раз изменил правила доступа к внешней памяти (external storage) и ввел понятие Scoped Storage. Теперь:
apps that target Android 10 (API level 29) and higher are given scoped access into external storage, or scoped storage, by default. Such apps have access only to the app-specific directory on external storage, as well as specific types of media that the app has created.
У меня есть приложение, в которой используется хранение данных юзера в SQLite БД, которая размещается во внешней памяти. Это сделано умышленно, поскольку по предыдущим отзывам было много жалоб юзеров при сносе приложения уничтожались также данные во внутренней памяти (каталог android/android/[пакет приложения]/files
). Конечно, в аппе была возможность бэкапа данных и все такое прочее, но юзеры обычно игнорят ее.
В итоге, в свое время я принял решение о хранении данных в каталоге /Documents
, который возвращался методом Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
, который в API 29 обьявлен deprecated
Внимание вопрос: что мне надо сделать, чтобы достукиваться до БД SQLite хранящейся во внешней памяти посредством обычного SQLiteOpenHelper
- при условии android:targetSdkVersion="29"
?
Update
Под открытием имеется ввиду использование штатной конструкции:
SQLiteDatabase db=SQLiteDatabase.openDatabase(file.getPath(),
null,
SQLiteDatabase.OPEN_READWRITE);
В Андроид 10 добавлен атрибут для <application>
hasFragileUserData
When the user uninstalls an app, whether or not to show the user a prompt to keep the app's data. The default value is "false".
То есть при установленном значении true
юзеру будет предоставлен выбор удалять ли данные вместе с приложением.
Конечно хотелось бы большего: какие-никакие настройки (что бы не думать куда пихать временные файлы так чтобы они потом не остались мёртвым грузом и не напугали юзера своим размером) и чтоб галочка была включена по-умолчанию или по выбору...
Эту опцию нужно было добавить давным-давно - многие разработчики в принципе лезли во внешнюю память только из-за её отсутствия.
К сожалению, атрибут никак не влияет на устройства c API старше 29.
Лучше уже не станет гугл будет и дальше гайки закручивать, юзай базу в локальном каталоге, а при выходе из активити делай бэкап на флешку через Uri.
Добавь в манифест:
<application
...
android:requestLegacyExternalStorage="true">
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Надо, чтобы пользователь указал путь к папке с файлами через визуальный файловый менеджерНашел следующий код
Не могу разобраться где взять "Request URL" для ивента, в задаче надо поприветствовать нового участника каналаИ похоже для этого, нужно подписать...
Я хочу, чтобы цвет фонового изображения SVG заполнялся постепенно, в процентах
Давайте перейдем сразу к сути) У меня есть директория console/indexphp