Android Q: ฐานข้อมูล SQLite ในที่จัดเก็บข้อมูลที่กำหนดขอบเขต


13

ใน Android Q แนะนำคุณสมบัติการจัดเก็บ Scopedใหม่ซึ่งกล่าวว่า:

แอปที่กำหนดเป้าหมายเป็น Android 10 (API ระดับ 29) และสูงกว่าจะได้รับการกำหนดขอบเขตการเข้าถึงที่จัดเก็บข้อมูลภายนอกหรือที่เก็บข้อมูลที่กำหนดขอบเขตโดยค่าเริ่มต้น แอพดังกล่าวมีการเข้าถึงเฉพาะไดเรกทอรีเฉพาะแอปบนที่จัดเก็บข้อมูลภายนอกรวมถึงสื่อประเภทเฉพาะที่แอปสร้างขึ้น

ฉันมีแอพของฉันที่สร้างฐานข้อมูล SQLite บนที่จัดเก็บข้อมูลภายนอกเช่นเมื่อแอปถอนการติดตั้งฐานข้อมูลยังมีชีวิตอยู่และสามารถใช้ในภายหลังเป็นการกู้คืนหรือใช้นอกอุปกรณ์ Android (สมมติว่าในพีซี)

ฉันจะบรรลุผลเช่นเดียวกันกับ Android Q ได้อย่างไร แม่นยำยิ่งขึ้นถ้าฐานข้อมูลที่จัดเก็บในไดเรกทอรีสาธารณะภายนอกฉันจะอ่านฐานข้อมูลนี้โดยใช้มาตรฐานได้SQLiteOpenHelperอย่างไร


อย่างน้อยคุณจะไม่สามารถใช้เฟรมเวิร์ก SQLite หรือสนับสนุน SQLite AndroidX API (อันที่ห้องใช้) ฉันไม่สามารถแยกแยะโซลูชันที่คลุมเครือไม่ได้โดยใช้ไลบรารี SQLite ที่คอมไพล์แล้วและอาจเป็นตัวบ่งชี้ไฟล์
CommonsWare

ไม่ไม่. หนู 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จะหายไป ...
Barmaley Red Star

เกี่ยวกับการหายตัวไปในขณะที่ฉันเข้าใจมันเราจะไม่รอนานเกินไป Scoped Storage will be required in next year’s major platform release for all apps, independent of target SDK level. Android Q Scoped Storage: แนวทางปฏิบัติและการอัพเดทที่ดีที่สุด
Merov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.