Android F: SQLite-Datenbank im Speicherbereich

13

In Android Q neu eingeführt Speicherfunktion von Scoped Folgendes besagt:

Apps, die auf Android 10 (API-Stufe 29) und höher abzielen, erhalten standardmäßig Zugriff auf externen Speicher oder Speicher mit Gültigkeitsbereich. Solche Apps haben nur Zugriff auf das app-spezifische Verzeichnis im externen Speicher sowie auf bestimmte Medientypen, die die App erstellt hat.

Ich habe meine App, die eine SQLite-Datenbank auf einem externen Speicher erstellt, sodass die App bei der Deinstallation der Datenbank noch aktiv ist und später als Wiederherstellung oder außerhalb des Android-Geräts verwendet werden kann (z. B. auf dem PC).

Wie soll ich mit Android Q den gleichen Effekt erzielen? Genauer gesagt, wenn die Datenbank in einem externen öffentlichen Verzeichnis gespeichert ist - wie kann ich diese Datenbank mit Standard lesen SQLiteOpenHelper?

Barmaley Roter Stern
quelle
Sie können dies nicht, zumindest nicht mit dem Framework SQLite oder der SQLite-AndroidX-API (die von Room verwendet wird). Ich kann eine obskure Lösung mit einer benutzerdefinierten kompilierten SQLite-Bibliothek und möglicherweise einem Dateideskriptor nicht ausschließen.
CommonsWare
Nein, nein. noo-oooo-oooo! Ich kann nicht glauben, dass es eine Möglichkeit geben muss, die SQLite-Datenbank im öffentlichen Verzeichnis zu verwenden ...
Barmaley Red Star
Beim Starten und Herunterfahren Ihrer App können Sie eine Kopie der Datenbankdatei erstellen. Für die Verwendung des Medienspeichers benötigen Sie keine Berechtigungen.
Blackapps
@blackapps, sicher verstehe ich diese Option, obwohl ich mich über einen anderen Ansatz freuen würde: direkter Zugriff auf die SQLite-Datenbank im externen Speicher
Barmaley Red Star
AutoBackup kann zur Wiederherstellung von Datenbankdateien verwendet werden.
Kunst

Antworten:

3

Sie können versuchen, die Lösung aus den folgenden Dokumenten zu verwenden:
https://developer.android.com/training/data-storage/compatibility

  • Ziel Android 9 (API Level 28) oder niedriger.
  • Wenn Sie auf Android 10 (API-Stufe 29) oder höher abzielen, setzen Sie den Wert requestLegacyExternalStoragein truein der Manifestdatei Ihrer App auf:
<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android 10 or higher. -->
    <application android:requestLegacyExternalStorage="true" ... >
    ...
    </application>
</manifest>
Merov
quelle
Sieht so aus, als wäre es die beste Lösung, obwohl ich gerne eine andere Lösung finden würde. Ich habe nur Angst, dass einige Zeit android:requestLegacyExternalStorageverschwinden wird ...
Barmaley Red Star
Über das Verschwinden, wie ich es verstehe, werden wir nicht zu lange warten. Scoped Storage will be required in next year’s major platform release for all apps, independent of target SDK level. Android Q Scoped Storage: Best Practices und Updates
Merov