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

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

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

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

วิดีโอ