Android ใช้ระบบไฟล์ที่คล้ายกับระบบไฟล์แบบใช้ดิสก์ ใหม่ ระบบมีตัวเลือกมากมายให้คุณบันทึกข้อมูลแอป ดังนี้
- พื้นที่เก็บข้อมูลเฉพาะแอป: จัดเก็บไฟล์ที่มีไว้สำหรับการใช้งานของแอปเท่านั้น ไม่ว่าจะอยู่ในไดเรกทอรีเฉพาะภายในวอลุ่มพื้นที่เก็บข้อมูลภายในหรือไดเรกทอรีเฉพาะอื่นภายในพื้นที่เก็บข้อมูลภายนอก ใช้ไดเรกทอรีภายในที่จัดเก็บข้อมูลภายในเพื่อบันทึกข้อมูลที่ละเอียดอ่อนซึ่งแอปอื่นๆ ไม่ควรเข้าถึง
- พื้นที่เก็บข้อมูลที่ใช้ร่วมกัน: จัดเก็บไฟล์ที่แอปของคุณตั้งใจจะแชร์กับแอปอื่นๆ ซึ่งรวมถึงสื่อ เอกสาร และไฟล์อื่นๆ
- ค่ากำหนด: จัดเก็บข้อมูลพื้นฐานซึ่งเป็นข้อมูลส่วนตัวในคู่คีย์-ค่า
- ฐานข้อมูล: จัดเก็บข้อมูลที่มีโครงสร้างในฐานข้อมูลส่วนตัวโดยใช้ห้อง ความต่อเนื่องของไลบรารี
ลักษณะเฉพาะของตัวเลือกเหล่านี้สรุปไว้ในตารางต่อไปนี้
ประเภทเนื้อหา | วิธีการเข้าถึง | สิทธิ์ที่จำเป็น | แอปอื่นสามารถเข้าถึงได้ไหม | ไฟล์ถูกนำออกเมื่อถอนการติดตั้งแอปใช่ไหม | |
---|---|---|---|---|---|
เฉพาะแอป ไฟล์ | ไฟล์ที่มีไว้สำหรับการใช้งานของแอปเท่านั้น | จากที่จัดเก็บข้อมูลภายใน ให้กด getFilesDir() หรือ
getCacheDir() จากที่จัดเก็บข้อมูลภายนอก ให้กด getExternalFilesDir() หรือ
getExternalCacheDir() |
ไม่จําเป็นสำหรับที่จัดเก็บข้อมูลภายใน ไม่จําเป็นสําหรับที่จัดเก็บข้อมูลภายนอกเมื่อแอปของคุณใช้ในอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 19) ขึ้นไป |
ไม่ | ใช่ |
สื่อ | ไฟล์สื่อที่แชร์ได้ (รูปภาพ ไฟล์เสียง วิดีโอ) | MediaStore API |
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 | ไลบรารีการคงข้อมูล Room | ไม่มี | ไม่ | ใช่ |
โซลูชันที่เลือกจะขึ้นอยู่กับความต้องการเฉพาะของคุณ ดังนี้
- ข้อมูลของคุณต้องใช้พื้นที่เท่าใด
- พื้นที่เก็บข้อมูลภายในมีพื้นที่จำกัดสำหรับข้อมูลที่เฉพาะเจาะจงของแอป ใช้ประเภทอื่นๆ หากคุณต้องการบันทึกข้อมูลไว้จำนวนมาก
- การเข้าถึงข้อมูลต้องมีความน่าเชื่อถือเพียงใด
- หากฟังก์ชันการทํางานพื้นฐานของแอปต้องใช้ข้อมูลบางอย่าง เช่น เมื่อแอปเริ่มทํางาน ให้วางข้อมูลไว้ในไดเรกทอรีที่จัดเก็บข้อมูลภายในหรือฐานข้อมูล ไฟล์เฉพาะแอปที่จัดเก็บไว้ในที่จัดเก็บข้อมูลภายนอกอาจเข้าถึงไม่ได้เสมอไปเนื่องจากอุปกรณ์บางรุ่นอนุญาตให้ผู้ใช้นำอุปกรณ์จริงที่สอดคล้องกับที่จัดเก็บข้อมูลภายนอกออก
- คุณต้องจัดเก็บข้อมูลประเภทใด
- หากคุณมีข้อมูลที่มีความหมายสำหรับแอปเท่านั้น ให้ใช้เฉพาะแอป พื้นที่เก็บข้อมูล สำหรับเนื้อหาสื่อที่แชร์ได้ ให้ใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อให้แอปอื่นๆ เข้าถึงเนื้อหาได้ สำหรับข้อมูลที่มีโครงสร้าง ให้ใช้ค่ากำหนด (สำหรับคีย์-ค่า) ข้อมูล) หรือฐานข้อมูล (สำหรับข้อมูลที่มีมากกว่า 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 สามารถเข้าถึงได้ หากคุณจัดเก็บไฟล์เฉพาะแอปไว้ในที่จัดเก็บข้อมูลภายนอก คุณสามารถทำให้การใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขตง่ายขึ้นได้โดยวางไฟล์เหล่านี้ไว้ในไดเรกทอรีเฉพาะแอปในที่จัดเก็บข้อมูลภายนอก วิธีนี้จะช่วยให้แอปของคุณยังคงเข้าถึงไฟล์เหล่านี้ได้เมื่อเปิดใช้พื้นที่เก็บข้อมูลแบบจำกัด
หากต้องการเตรียมแอปให้พร้อมใช้งานพื้นที่เก็บข้อมูลแบบจำกัด โปรดดูคู่มือUse Case และแนวทางปฏิบัติแนะนําสําหรับพื้นที่เก็บข้อมูล หากแอปของคุณมีการใช้งานอีก กรณีที่ไม่ได้ครอบคลุมอยู่ในพื้นที่เก็บข้อมูลที่กำหนดขอบเขต ให้ส่งฟีเจอร์ คำขอ คุณสามารถเลือกไม่ใช้พื้นที่เก็บข้อมูลแบบจำกัดชั่วคราว
ดูไฟล์ในอุปกรณ์
หากต้องการดูไฟล์ที่จัดเก็บไว้ในอุปกรณ์ ให้ใช้ไฟล์ในอุปกรณ์ของ Android Studio สำรวจ
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับพื้นที่เก็บข้อมูลได้ในแหล่งข้อมูลต่อไปนี้