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

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 ไม่มี ไม่ ใช่
ฐานข้อมูล ข้อมูลที่มีโครงสร้าง ไลบรารีการคงอยู่ของ 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 อื่นที่ไม่ได้ครอบคลุมโดยพื้นที่เก็บข้อมูลที่จำกัดขอบเขต โปรดส่งคำขอฟีเจอร์ คุณสามารถเลือกไม่ใช้ที่เก็บข้อมูลที่จำกัดขอบเขตชั่วคราวได้

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

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

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

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

วิดีโอ