Android Q: база даних SQLite в просторі


13

В Android Q була представлена ​​нова функція зберігання в масштабі , яка говорить:

додаткам, орієнтованим на Android 10 (рівень API 29) і новіших, за замовчуванням надається широкомасштабний доступ до зовнішнього сховища чи масштабного сховища. Такі додатки мають доступ лише до конкретного каталогу додатка на зовнішньому сховищі, а також до певних типів носіїв, які додаток створив.

У мене є додаток, яке створює базу даних SQLite на зовнішньому сховищі, таким чином, коли додаток видаляє базу даних, як і раніше, вона може бути використана пізніше як відновлення або використовуватись поза пристроєм Android (скажімо, на ПК)

Як мені досягти такого ж ефекту за допомогою Android Q? Точніше, якщо база даних зберігається у зовнішньому загальнодоступному каталозі - як я можу прочитати цю базу даних за допомогою стандартного SQLiteOpenHelper?


Ви не можете, принаймні, не використовувати рамковий SQLite або підтримку API SQLite AndroidX (той, який використовується Room). Я не можу виключити якесь незрозуміле рішення за допомогою спеціально складеної бібліотеки SQLite і, можливо, дескриптора файлів.
CommonsWare

Ні ні. noo-oooo-oooo! Я не можу повірити, повинен бути спосіб використовувати базу даних SQLite, розміщену в загальнодоступному каталозі ...
Barmaley Red Star

Після запуску та вимкнення програми ви можете зробити копію файлу бази даних. Для використання медіа-магазину вам не потрібно дозволів.
blackapps

@blackapps, я впевнений, що я розумію цей варіант, хоча б радий і інший підхід: прямий доступ до бази даних SQLite на зовнішньому сховищі
Barmaley Red Star

Автозавантаження можна використовувати для відновлення файлів бази даних.
мистецтво

Відповіді:


3

Ви можете спробувати використати рішення з документів:
https://developer.android.com/training/data-storage/compatibility

  • Націліть на Android 9 (рівень API 28) або нижче.
  • Якщо таргетинг Android 10 (рівень API 29) або вище, Ви можете активувати requestLegacyExternalStorageдля trueв файлі маніфесту вашого додатка:
<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android 10 or higher. -->
    <application android:requestLegacyExternalStorage="true" ... >
    ...
    </application>
</manifest>

Схоже, це найкраще рішення, хоча я би радий знайти інше рішення. Я просто боюся, що якийсь час android:requestLegacyExternalStorageзникне ...
Бармалей Червона зірка

Про те, як зникнути, як я це розумію, ми не будемо чекати занадто довго. Scoped Storage will be required in next year’s major platform release for all apps, independent of target SDK level. Об'єм зберігання Android Q: найкращі практики та оновлення
Меров,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.