Android Q: base de données SQLite dans un stockage étendu


13

Dans Android Q, a introduit une nouvelle fonctionnalité de stockage Scoped , qui dit:

les applications qui ciblent Android 10 (niveau 29 de l'API) et versions ultérieures bénéficient d'un accès limité au stockage externe ou au stockage limité, par défaut. Ces applications ont uniquement accès au répertoire spécifique à l'application sur le stockage externe, ainsi qu'aux types de médias spécifiques que l'application a créés.

J'ai mon application qui crée une base de données SQLite sur un stockage externe, de sorte que lorsque l'application désinstalle la base de données encore en vie et peut être utilisée plus tard comme récupération ou être utilisée en dehors de l'appareil Android (disons sur PC)

Comment dois-je obtenir le même effet avec Android Q? Plus précisément si la base de données est stockée dans un répertoire public externe - comment puis-je lire cette base de données en utilisant le standard SQLiteOpenHelper?


Vous ne pouvez pas, du moins pas avec le framework SQLite ou le support SQLite AndroidX API (celui utilisé par Room). Je ne peux pas exclure une solution obscure en utilisant une bibliothèque SQLite compilée sur mesure et peut-être un descripteur de fichier.
CommonsWare

Non non. noo-oooo-oooo! Je ne peux pas croire, il doit y avoir un moyen d'utiliser la base de données SQLite placée dans le répertoire public ...
Barmaley Red Star

Au démarrage et à l'arrêt de votre application, vous pouvez faire une copie du fichier de base de données. En utilisant le magasin de médias, vous n'avez besoin d'aucune autorisation.
blackapps

@blackapps, je comprends bien cette option, mais je serais heureux d'avoir une autre approche également: accès direct à la base de données SQLite sur le stockage externe
Barmaley Red Star

AutoBackup peut être utilisé pour la récupération de fichiers de base de données.
art

Réponses:


3

Vous pouvez essayer d'utiliser la solution à partir des documents:
https://developer.android.com/training/data-storage/compatibility

  • Ciblez Android 9 (API niveau 28) ou inférieur.
  • Si vous ciblez Android 10 (API niveau 29) ou supérieur, définissez la valeur de requestLegacyExternalStoragesur truedans le fichier manifeste de votre application:
<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android 10 or higher. -->
    <application android:requestLegacyExternalStorage="true" ... >
    ...
    </application>
</manifest>

On dirait que c'est la meilleure solution, mais je serais heureux de trouver une autre solution. J'ai juste peur qu'un certain temps android:requestLegacyExternalStoragene disparaisse ...
Barmaley Red Star

A propos de disparaître si je comprends bien, nous n'attendrons pas trop longtemps. Scoped Storage will be required in next year’s major platform release for all apps, independent of target SDK level. Stockage de portée Android Q: meilleures pratiques et mises à jour
Merov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.