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

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

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

พื้นที่เก็บข้อมูลที่กำหนดขอบเขต

แอปที่กำหนดเป้าหมายเป็น Android 10 (API ระดับ 29) ขึ้นไปจะได้รับสิทธิ์เข้าถึงที่กําหนดขอบเขตในที่จัดเก็บข้อมูลภายนอกหรือพื้นที่เก็บข้อมูลที่กําหนดขอบเขตโดยค่าเริ่มต้น เพื่อให้ผู้ใช้ควบคุมไฟล์ได้มากขึ้นและจำกัดความกระจัดกระจายของไฟล์ แอปดังกล่าวจะมีสิทธิ์เข้าถึงเฉพาะไดเรกทอรีเฉพาะแอปในที่จัดเก็บข้อมูลภายนอก รวมถึงสื่อบางประเภทที่แอปสร้างขึ้น

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

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

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

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

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

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

วิดีโอ