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