Android ใช้ระบบไฟล์ที่คล้ายกับระบบไฟล์แบบใช้ดิสก์ ใหม่ ระบบมีตัวเลือกมากมายให้คุณบันทึกข้อมูลแอป ดังนี้
- พื้นที่เก็บข้อมูลเฉพาะแอป: จัดเก็บไฟล์ที่เหมาะสมสำหรับการใช้งานของแอปเท่านั้น ในไดเรกทอรีเฉพาะภายในวอลุ่มที่จัดเก็บข้อมูลภายในหรือ ไดเรกทอรีภายในที่จัดเก็บข้อมูลภายนอกโดยเฉพาะ ใช้ไดเรกทอรีภายใน ที่จัดเก็บข้อมูลภายในเพื่อบันทึกข้อมูลที่ละเอียดอ่อนที่แอปอื่นๆ ไม่ควรเข้าถึง
- พื้นที่เก็บข้อมูลที่ใช้ร่วมกัน: จัดเก็บไฟล์ที่แอปของคุณตั้งใจจะแชร์กับผู้อื่น แอป รวมถึงสื่อ เอกสาร และไฟล์อื่นๆ
- ค่ากำหนด: จัดเก็บข้อมูลพื้นฐานซึ่งเป็นข้อมูลส่วนตัวในคู่คีย์-ค่า
- ฐานข้อมูล: จัดเก็บข้อมูลที่มีโครงสร้างในฐานข้อมูลส่วนตัวโดยใช้ห้อง ความต่อเนื่องของไลบรารี
ลักษณะเฉพาะของตัวเลือกเหล่านี้สรุปไว้ในตารางต่อไปนี้
ประเภทเนื้อหา | วิธีการเข้าถึง | สิทธิ์ที่จำเป็น | แอปอื่นสามารถเข้าถึงได้ไหม | ไฟล์ถูกนำออกเมื่อถอนการติดตั้งแอปใช่ไหม | |
---|---|---|---|---|---|
เฉพาะแอป ไฟล์ | ไฟล์ที่มีไว้ใช้กับแอปของคุณเท่านั้น | จากที่จัดเก็บข้อมูลภายใน getFilesDir() หรือ
getCacheDir() จากที่จัดเก็บข้อมูลภายนอก getExternalFilesDir() หรือ
getExternalCacheDir() |
ไม่จำเป็นต้องใช้สำหรับที่จัดเก็บข้อมูลภายใน ไม่จำเป็นต้องใช้สำหรับภายนอก พื้นที่เก็บข้อมูลเมื่อใช้แอปของคุณในอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 19) ขึ้นไป |
ไม่ | ใช่ |
สื่อ | ไฟล์สื่อที่แชร์ได้ (รูปภาพ ไฟล์เสียง วิดีโอ) | API ของ MediaStore |
READ_EXTERNAL_STORAGE เมื่อเข้าถึงแอปอื่นๆ ไฟล์ใน
Android 11 (API ระดับ 30) ขึ้นไปREAD_EXTERNAL_STORAGE หรือ WRITE_EXTERNAL_STORAGE
เมื่อเข้าถึงแอปอื่น ไฟล์ใน Android 10 (API ระดับ 29)ต้องมีสิทธิ์สำหรับไฟล์ทั้งหมดใน Android 9 (API ระดับ 28) หรือ ต่ำกว่า |
ใช่ แต่แอปอื่นต้องใช้ READ_EXTERNAL_STORAGE
สิทธิ์ |
ไม่ |
เอกสารและ ไฟล์อื่นๆ | เนื้อหาที่แชร์ได้ประเภทอื่นๆ ซึ่งรวมถึงไฟล์ที่ดาวน์โหลด | เฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูล | ไม่มี | ใช่ ผ่านเครื่องมือเลือกไฟล์ระบบ | ไม่ |
แอป ค่ากำหนด | คู่คีย์-ค่า | เจ็ตแพ็ค ไลบรารีค่ากำหนด | ไม่มี | ไม่ | ใช่ |
ฐานข้อมูล | Structured Data | ไลบรารีการถาวรของห้อง | ไม่มี | ไม่ | ใช่ |
โซลูชันที่เลือกจะขึ้นอยู่กับความต้องการเฉพาะของคุณ ดังนี้
- ข้อมูลของคุณต้องใช้พื้นที่เท่าใด
- ที่จัดเก็บข้อมูลภายในมีพื้นที่จำกัดสำหรับข้อมูลเฉพาะแอป ใช้ประเภทอื่นๆ หากคุณต้องการบันทึกข้อมูลไว้จำนวนมาก
- การเข้าถึงข้อมูลต้องมีความน่าเชื่อถือเพียงใด
- หากฟังก์ชันพื้นฐานของแอปต้องใช้ข้อมูลบางอย่าง เช่น เมื่อแอปของคุณ กำลังเริ่มต้น วางข้อมูลภายในไดเรกทอรีที่จัดเก็บข้อมูลภายในหรือฐานข้อมูล คุณอาจไม่สามารถเข้าถึงไฟล์เฉพาะแอปที่จัดเก็บไว้ในที่จัดเก็บข้อมูลภายนอกได้เสมอไป เนื่องจากอุปกรณ์บางอย่างให้ผู้ใช้นำอุปกรณ์ที่สอดคล้องกับ ที่จัดเก็บข้อมูลภายนอก
- คุณต้องจัดเก็บข้อมูลประเภทใด
- หากคุณมีข้อมูลที่มีความหมายสำหรับแอปเท่านั้น ให้ใช้เฉพาะแอป พื้นที่เก็บข้อมูล สำหรับเนื้อหาสื่อที่แชร์ได้ ให้ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อให้แอปอื่นๆ ทำได้ เข้าถึงเนื้อหา สำหรับข้อมูลที่มีโครงสร้าง ให้ใช้ค่ากำหนด (สำหรับคีย์-ค่า) ข้อมูล) หรือฐานข้อมูล (สำหรับข้อมูลที่มีมากกว่า 2 คอลัมน์)
- ข้อมูลควรเป็นข้อมูลส่วนตัวในแอปหรือไม่
- เมื่อจัดเก็บข้อมูลที่ละเอียดอ่อน ซึ่งก็คือข้อมูลที่ไม่ควรเข้าถึงได้อีก ใช้ที่จัดเก็บข้อมูลภายใน ค่ากำหนด หรือฐานข้อมูล ที่จัดเก็บข้อมูลภายในมี ประโยชน์เพิ่มเติมของการซ่อนข้อมูลจากผู้ใช้
หมวดหมู่ของตำแหน่งพื้นที่เก็บข้อมูล
Android มีตำแหน่งพื้นที่เก็บข้อมูลจริง 2 ประเภท ได้แก่ พื้นที่เก็บข้อมูลภายใน และ ที่จัดเก็บข้อมูลภายนอก อุปกรณ์ส่วนใหญ่ที่จัดเก็บข้อมูลภายในมีขนาดเล็กกว่าอุปกรณ์ภายนอก พื้นที่เก็บข้อมูล อย่างไรก็ตาม อุปกรณ์ทุกชนิดจะมีที่จัดเก็บข้อมูลภายในอยู่ ทำให้ ซึ่งเป็นที่ที่เชื่อถือได้มากขึ้นในการวางข้อมูลที่แอปต้องใช้
วอลุ่มที่นำออกได้ เช่น การ์ด SD จะปรากฏในระบบไฟล์โดยเป็นส่วนหนึ่งของ
ที่จัดเก็บข้อมูลภายนอก Android จะแสดงอุปกรณ์เหล่านี้โดยใช้เส้นทาง เช่น
/sdcard
โดยค่าเริ่มต้น แอปพลิเคชันจะจัดเก็บไว้ในที่จัดเก็บข้อมูลภายใน หากขนาด APK ของคุณ มีขนาดใหญ่มาก แต่คุณระบุค่ากำหนดภายในไฟล์ Manifest ของแอปได้ เพื่อติดตั้งแอปของคุณในที่จัดเก็บข้อมูลภายนอกแทน:
<manifest ... android:installLocation="preferExternal"> ... </manifest>
สิทธิ์และการเข้าถึงที่จัดเก็บข้อมูลภายนอก
Android กำหนดสิทธิ์ที่เกี่ยวข้องกับพื้นที่เก็บข้อมูลดังต่อไปนี้
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
และ
MANAGE_EXTERNAL_STORAGE
ใน Android เวอร์ชันก่อนหน้า แอปจำเป็นต้องประกาศ
สิทธิ์ของ READ_EXTERNAL_STORAGE
ในการเข้าถึงไฟล์ใดก็ได้นอกแอปเฉพาะ
ไดเรกทอรีในพื้นที่เก็บข้อมูลภายนอก
นอกจากนี้ แอปต้องประกาศสิทธิ์ WRITE_EXTERNAL_STORAGE
ในการเขียนด้วย
ไฟล์ใดก็ได้ที่อยู่นอกไดเรกทอรีเฉพาะแอป
Android เวอร์ชันล่าสุดอาศัยจุดประสงค์ของไฟล์มากกว่าตำแหน่งของไฟล์
สำหรับกำหนดความสามารถของแอปในการเข้าถึงและเขียนข้อมูลในไฟล์ที่ระบุ ใน
โดยเฉพาะอย่างยิ่ง หากแอปกำหนดเป้าหมายเป็น Android 11 (API ระดับ 30) ขึ้นไป
สิทธิ์WRITE_EXTERNAL_STORAGE
ไม่มีผลกับแอปของคุณ
สิทธิ์เข้าถึงพื้นที่เก็บข้อมูล รูปแบบพื้นที่เก็บข้อมูลที่อิงตามวัตถุประสงค์นี้ช่วยเพิ่มความเป็นส่วนตัวของผู้ใช้
เนื่องจากแอปจะได้รับสิทธิ์เข้าถึงเฉพาะพื้นที่ในระบบไฟล์ของอุปกรณ์ซึ่ง
ที่พวกเขาใช้กันจริงๆ
Android 11 เปิดตัวสิทธิ์ MANAGE_EXTERNAL_STORAGE
ซึ่งให้
สิทธิ์การเขียนไฟล์นอกไดเรกทอรีเฉพาะแอปและ MediaStore
ถึง
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์นี้และเหตุผลที่แอปส่วนใหญ่ไม่จำเป็นต้องประกาศสิทธิ์นี้
ดำเนินการตามกรณีการใช้งานได้ในคู่มือเกี่ยวกับวิธีจัดการทั้งหมด
ไฟล์ในอุปกรณ์จัดเก็บข้อมูล
พื้นที่เก็บข้อมูลที่กำหนดขอบเขต
เพื่อให้ผู้ใช้ควบคุมไฟล์ได้มากขึ้น และจำกัดความยุ่งเหยิงของไฟล์ เป้าหมายเป็น Android 10 (API ระดับ 29) ขึ้นไปจะได้รับสิทธิ์เข้าถึงที่กำหนดขอบเขตไว้เป็นภายนอก หรือพื้นที่เก็บข้อมูลที่กำหนดขอบเขตโดยค่าเริ่มต้น แอปดังกล่าวมีสิทธิ์เข้าถึงเฉพาะ ไดเรกทอรีเฉพาะแอปในพื้นที่เก็บข้อมูลภายนอก รวมถึงสื่อบางประเภท ที่แอปสร้างขึ้น
ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต เว้นแต่ว่าแอปของคุณต้องการเข้าถึงไฟล์ที่เก็บไว้ภายนอก
ของไดเรกทอรีเฉพาะแอปและภายนอก
ของไดเรกทอรีที่ MediaStore
API สามารถเข้าถึงได้ หากคุณจัดเก็บไฟล์เฉพาะแอปบนที่จัดเก็บข้อมูลภายนอก คุณจะดำเนินการต่อไปนี้ได้
ใช้งานพื้นที่เก็บข้อมูลที่กำหนดขอบเขตได้ง่ายๆ โดยวางไฟล์เหล่านี้ใน
ไดเรกทอรีเฉพาะแอปภายนอก
พื้นที่เก็บข้อมูล วิธีนี้จะทำให้แอปของคุณ
รักษาสิทธิ์การเข้าถึงไฟล์เหล่านี้เมื่อเปิดใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต
หากต้องการเตรียมแอปให้พร้อมสําหรับพื้นที่เก็บข้อมูลที่กำหนดขอบเขต โปรดดู กรณีการใช้งานพื้นที่เก็บข้อมูลและ แนวทางปฏิบัติที่ดีที่สุด หากแอปของคุณมีการใช้งานอีก กรณีที่ไม่ได้ครอบคลุมอยู่ในพื้นที่เก็บข้อมูลที่กำหนดขอบเขต ให้ส่งฟีเจอร์ คำขอ คุณสามารถ เลือกไม่ใช้การใช้ขอบเขตชั่วคราว พื้นที่เก็บข้อมูล
ดูไฟล์ในอุปกรณ์
หากต้องการดูไฟล์ที่จัดเก็บไว้ในอุปกรณ์ ให้ใช้ไฟล์ในอุปกรณ์ของ Android Studio สำรวจ
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับพื้นที่เก็บข้อมูลได้ในแหล่งข้อมูลต่อไปนี้