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?

Barmaley Red Star
sumber
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>
Merov
sumber
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