Android Q: Database SQLite dalam penyimpanan scoped


13

Di Android Q memperkenalkan fitur penyimpanan Scoped baru , yang mengatakan:

aplikasi yang menargetkan Android 10 (API level 29) dan lebih tinggi diberikan akses scoping ke penyimpanan eksternal, atau penyimpanan scoped, secara default. Aplikasi semacam itu hanya memiliki akses ke direktori khusus aplikasi pada penyimpanan eksternal, serta jenis media tertentu yang telah dibuat aplikasi.

Saya memiliki aplikasi saya yang membuat basis data SQLite pada penyimpanan eksternal, sehingga ketika aplikasi mencopot basis data masih hidup dan dapat digunakan nanti sebagai pemulihan atau digunakan di luar perangkat Android (misalkan di PC)

Bagaimana saya harus mencapai efek yang sama dengan Android Q? Lebih tepatnya jika database disimpan dalam direktori publik eksternal - bagaimana saya bisa membaca database ini menggunakan standar SQLiteOpenHelper?


Anda tidak bisa, setidaknya tidak dengan kerangka kerja SQLite atau dukungan SQLite AndroidX API (yang digunakan oleh Room). Saya tidak bisa mengesampingkan beberapa solusi tidak jelas menggunakan pustaka SQLite yang dikompilasi khusus dan mungkin deskriptor file.
CommonsWare

Tidak tidak. noo-oooo-oooo! Saya tidak percaya, harus ada cara untuk menggunakan database SQLite yang ditempatkan di direktori publik ...
Barmaley Red Star

Saat memulai dan mematikan aplikasi Anda, Anda dapat membuat salinan file database. Menggunakan media store, Anda tidak perlu izin.
blackapps

@blackapps, tentu saja saya mengerti pilihan ini, walaupun saya akan senang memiliki pendekatan lain juga: akses langsung ke database SQLite pada penyimpanan eksternal
Barmaley Red Star

AutoBackup dapat digunakan untuk pemulihan file database.
seni

Jawaban:


3

Anda dapat mencoba menggunakan solusi dari dokumen:
https://developer.android.com/training/data-storage/compatibility

  • Targetkan Android 9 (API level 28) atau lebih rendah.
  • Jika Anda menargetkan Android 10 (API level 29) atau lebih tinggi, setel nilai requestLegacyExternalStorageke truedalam file manifes aplikasi Anda:
<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android 10 or higher. -->
    <application android:requestLegacyExternalStorage="true" ... >
    ...
    </application>
</manifest>

Sepertinya, itu solusi terbaik, meskipun aku akan senang menemukan solusi lain. Saya hanya khawatir bahwa suatu saat android:requestLegacyExternalStorageakan hilang ...
Barmaley Red Star

Tentang menghilang seperti yang saya mengerti, kami tidak akan menunggu terlalu lama. Scoped Storage will be required in next year’s major platform release for all apps, independent of target SDK level. Penyimpanan Scoped Android Q: Praktik Terbaik dan Pembaruan
Merov
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.