ภาพรวมของพื้นที่เก็บข้อมูลและไฟล์

Android ใช้ระบบไฟล์ที่คล้ายกับระบบไฟล์ที่ใช้ดิสก์เป็นฐานในแพลตฟอร์มอื่นๆ ระบบมีตัวเลือกมากมายให้คุณบันทึกข้อมูลแอป ดังนี้

  • พื้นที่เก็บข้อมูลเฉพาะแอป: จัดเก็บไฟล์ที่ตั้งใจไว้ให้แอปของคุณใช้เท่านั้น ไม่ว่าจะอยู่ในไดเรกทอรีเฉพาะภายในวอลุ่มที่จัดเก็บข้อมูลภายใน หรือไดเรกทอรีเฉพาะต่างๆ ภายในพื้นที่เก็บข้อมูลภายนอก ใช้ไดเรกทอรีภายในที่จัดเก็บข้อมูลภายในเพื่อบันทึกข้อมูลที่ละเอียดอ่อนซึ่งแอปอื่นๆ ไม่ควรเข้าถึง
  • พื้นที่เก็บข้อมูลที่แชร์: จัดเก็บไฟล์ที่แอปของคุณต้องการแชร์กับแอปอื่นๆ ซึ่งรวมถึงสื่อ เอกสาร และไฟล์อื่นๆ
  • ค่ากำหนด: จัดเก็บข้อมูลดั้งเดิมส่วนตัวในคู่คีย์-ค่า
  • ฐานข้อมูล: จัดเก็บข้อมูลที่มีโครงสร้างในฐานข้อมูลส่วนตัวโดยใช้ไลบรารีการคงอยู่ของข้อมูล Room

ลักษณะของตัวเลือกเหล่านี้สรุปไว้ในตารางต่อไปนี้

ประเภทเนื้อหา วิธีการเข้าถึง สิทธิ์ที่จำเป็น แอปอื่นๆ เข้าถึงได้ไหม ระบบจะนำไฟล์ออกเมื่อถอนการติดตั้งแอปไหม
ไฟล์เฉพาะแอป ไฟล์ที่ตั้งใจไว้ให้แอปของคุณใช้เท่านั้น จากที่จัดเก็บข้อมูลภายใน 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 ไม่ได้
เอกสารและ ไฟล์อื่นๆ เนื้อหาประเภทอื่นๆ ที่แชร์ได้ รวมถึงไฟล์ที่ดาวน์โหลด Storage Access Framework ไม่มี ได้ผ่านเครื่องมือเลือกไฟล์ของระบบ ไม่ได้
ค่ากำหนด ของแอป คู่คีย์-ค่า ไลบรารีJetpack ค่ากำหนด ไม่มี ไม่ได้ ได้
ฐานข้อมูล ข้อมูลที่มีโครงสร้าง ไลบรารีการคงอยู่ของข้อมูล 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 เข้าถึงได้ หากคุณจัดเก็บไฟล์เฉพาะแอปไว้ในพื้นที่เก็บข้อมูลภายนอก คุณสามารถ ทำให้การใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขตง่ายขึ้นได้โดยวางไฟล์เหล่านี้ไว้ใน ไดเรกทอรีเฉพาะแอปในพื้นที่เก็บข้อมูลภายนอก ด้วยวิธีนี้ แอปของคุณจะยังคงเข้าถึงไฟล์เหล่านี้ได้เมื่อเปิดใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต

หากต้องการเตรียมแอปให้พร้อมสำหรับพื้นที่เก็บข้อมูลที่กำหนดขอบเขต โปรดดูคู่มือ Use Case และแนวทางปฏิบัติแนะนําสําหรับพื้นที่เก็บข้อมูล หากแอปของคุณมี Use Case อื่นที่พื้นที่เก็บข้อมูลที่กำหนดขอบเขตไม่ครอบคลุม โปรดยื่นคำขอฟีเจอร์ คุณสามารถ เลือกไม่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต ชั่วคราวได้.

ดูไฟล์ในอุปกรณ์

หากต้องการดูไฟล์ที่จัดเก็บไว้ในอุปกรณ์ ให้ใช้ Device File Explorer ของ Android Studio

แหล่งข้อมูลเพิ่มเติม

โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดเก็บข้อมูลได้จากแหล่งข้อมูลต่อไปนี้

วิดีโอ