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

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 สำรวจ

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

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

วิดีโอ