เพื่อให้ผู้ใช้ควบคุมไฟล์ได้มากขึ้นและจำกัดความยุ่งเหยิงของไฟล์ Android 10 เปิดตัวกระบวนทัศน์พื้นที่เก็บข้อมูลใหม่สำหรับแอปชื่อ พื้นที่เก็บข้อมูลที่กำหนดขอบเขต การเปลี่ยนแปลงพื้นที่เก็บข้อมูลที่กำหนดขอบเขต วิธีที่แอปจัดเก็บและเข้าถึงไฟล์ในที่จัดเก็บข้อมูลภายนอกของอุปกรณ์ เพื่อช่วยคุณ ย้ายข้อมูลแอปไปยังพื้นที่เก็บข้อมูลที่กำหนดขอบเขต ทำตามแนวทางปฏิบัติแนะนำสำหรับ กรณีการใช้งานพื้นที่เก็บข้อมูลที่ระบุไว้ในคู่มือนี้ Use Case ได้รับการจัดระเบียบ ออกเป็น 2 หมวดหมู่ ได้แก่ การจัดการไฟล์สื่อและการจัดการไฟล์สื่อ ไฟล์ที่ไม่ใช่สื่อ
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดเก็บและเข้าถึงไฟล์ใน Android โปรดดูที่พื้นที่เก็บข้อมูล คู่มือการฝึกอบรม
จัดการไฟล์สื่อ
ส่วนนี้อธิบาย Use Case ที่พบบ่อยในการจัดการไฟล์สื่อ (ไฟล์วิดีโอ รูปภาพ และไฟล์เสียง) และอธิบายถึงแนวทางระดับสูงที่ ที่ใช้งานได้ ตารางต่อไปนี้สรุปกรณีการใช้งานแต่ละรายการ และลิงก์ต่างๆ ลงในแต่ละส่วนที่มีรายละเอียดเพิ่มเติม
กรณีการใช้งาน | สรุป |
---|---|
แสดงไฟล์รูปภาพหรือวิดีโอทั้งหมด | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
แสดงรูปภาพหรือวิดีโอจาก โฟลเดอร์ | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
เข้าถึงข้อมูลตำแหน่งจาก รูปภาพ | ใช้วิธีใดวิธีหนึ่งหากแอปของคุณใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต ใช้ ในกรณีที่แอปของคุณเลือกไม่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต |
กำหนดตำแหน่งพื้นที่เก็บข้อมูลสำหรับการดาวน์โหลดใหม่ | ใช้วิธีใดวิธีหนึ่งหากแอปของคุณใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต ใช้ ในกรณีที่แอปของคุณเลือกไม่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต |
ส่งออกไฟล์สื่อของผู้ใช้ไปยังอุปกรณ์ | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
แก้ไขหรือลบไฟล์สื่อหลายไฟล์ใน การดำเนินการเดียว | ใช้เพียงแนวทางเดียวสำหรับ Android 11 สำหรับ Android 10 ให้เลือกไม่ใช้ที่กำหนดขอบเขต และใช้วิธีการสำหรับ Android 9 หรือต่ำกว่าแทน |
นำเข้ารูปภาพเดี่ยวที่มีอยู่แล้ว มีอยู่ | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
ถ่ายภาพเดียว | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
แชร์ไฟล์สื่อกับแอปอื่นๆ | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
แชร์ไฟล์สื่อกับแอปที่เจาะจง | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
เข้าถึงไฟล์จากโค้ดหรือไลบรารี ที่ใช้เส้นทางไฟล์โดยตรง | ใช้เพียงแนวทางเดียวสำหรับ Android 11 สำหรับ Android 10 ให้เลือกไม่ใช้ที่กำหนดขอบเขต และใช้วิธีการสำหรับ Android 9 หรือต่ำกว่าแทน |
แสดงไฟล์รูปภาพหรือวิดีโอจากหลายโฟลเดอร์
ค้นหาคอลเล็กชันสื่อ
โดยใช้query()
API หากต้องการกรองหรือจัดเรียงไฟล์สื่อ ให้ปรับ projection
, selection
พารามิเตอร์ selectionArgs
และ sortOrder
แสดงรูปภาพหรือวิดีโอจากโฟลเดอร์ที่เจาะจง
ใช้วิธีการต่อไปนี้
- ทำตามแนวทางปฏิบัติแนะนำที่ระบุไว้ในขอสิทธิ์ของแอป
ขอ
READ_EXTERNAL_STORAGE
สิทธิ์ - เรียกไฟล์สื่อตามค่าของ
MediaColumns.DATA
ซึ่งมีเส้นทางระบบไฟล์แบบสัมบูรณ์ไปยังรายการสื่อในดิสก์
หมายเหตุ: เมื่อเข้าถึงไฟล์สื่อที่มีอยู่ คุณสามารถใช้ค่า
ของDATA
ในตรรกะของคุณ นั่นเป็นเพราะค่านี้มีเส้นทางไฟล์ที่ถูกต้อง
แต่อย่าคิดว่าไฟล์นี้พร้อมใช้งานเสมอ เตรียมตัวรับมือ
ข้อผิดพลาด I/O เกี่ยวกับไฟล์ที่อาจเกิดขึ้น
ในทางกลับกัน หากต้องการสร้างหรืออัปเดตไฟล์สื่อ โปรดอย่าใช้
DATA
แต่ให้ใช้ DISPLAY_NAME
และ
RELATIVE_PATH
คอลัมน์
เข้าถึงข้อมูลตำแหน่งจากรูปภาพ
หากแอปใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต โปรดทำตามขั้นตอนในข้อมูลตำแหน่ง ในรูปภาพ ของคู่มือพื้นที่เก็บข้อมูลสื่อ
กำหนดตำแหน่งพื้นที่เก็บข้อมูลสำหรับการดาวน์โหลดใหม่
หากแอปใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต โปรดระมัดระวังตำแหน่งที่คุณเลือก จัดเก็บไฟล์สื่อที่คุณดาวน์โหลด
หากแอปอื่นๆ ต้องการสิทธิ์เข้าถึงไฟล์ ให้พิจารณาใช้สื่อที่กำหนดมาอย่างดี คอลเล็กชัน สำหรับการดาวน์โหลดหรือคอลเล็กชันเอกสาร
ใน Android 11 ขึ้นไป ไฟล์ภายในแอปภายนอกที่เจาะจง
แอปอื่นไม่สามารถเข้าถึงได้ แม้ว่าคุณจะใช้ DownloadManager
เพื่อ
ดึงข้อมูลไฟล์เหล่านี้
ส่งออกไฟล์สื่อของผู้ใช้ไปยังอุปกรณ์
กำหนดตำแหน่งเริ่มต้นที่เหมาะสมเพื่อจัดเก็บสื่อของผู้ใช้ ไฟล์:
- อนุญาตให้ผู้ใช้เลือกได้ว่าจะให้แอปอื่นๆ อ่านไฟล์สื่อของตนหรือไม่ หรือไม่ โดยใช้พื้นที่เก็บข้อมูลเฉพาะแอปหรือพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน
- อนุญาตให้ผู้ใช้ส่งออกไฟล์จาก ไดเรกทอรีเฉพาะแอปไปยังตำแหน่งที่เข้าถึงได้อย่างทั่วถึงมากขึ้น ใช้คอลเล็กชันรูปภาพ วิดีโอ และเสียงของ MediaStore เพื่อส่งออกไฟล์สื่อไปยัง แกลเลอรีของอุปกรณ์
แก้ไขหรือลบไฟล์สื่อหลายไฟล์ในครั้งเดียว
ใช้ตรรกะที่อิงตามเวอร์ชัน Android ที่แอปของคุณใช้
ทำงานใน Android 11
ใช้วิธีการต่อไปนี้
- สร้าง Intent ที่รอดำเนินการสำหรับคำขอเขียนหรือลบแอปโดยใช้
MediaStore.createWriteRequest()
หรือMediaStore.createTrashRequest()
แล้วแจ้งให้ผู้ใช้ขอสิทธิ์แก้ไขชุดของไฟล์ด้วยการเรียกใช้ Intent ประเมินคำตอบของผู้ใช้
- หากได้รับสิทธิ์แล้ว ให้ดำเนินการแก้ไขหรือลบ
- หากไม่ได้รับสิทธิ์ ให้อธิบายให้ผู้ใช้ทราบถึงเหตุผลของฟีเจอร์นี้ คุณต้องให้สิทธิ์แอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดการกลุ่มสื่อ ที่กำลังใช้รายการเหล่านี้ วิธีการที่พร้อมใช้งานใน Android 11 ขึ้นไป
ทำงานใน Android 10
หากแอปกำหนดเป้าหมายเป็น Android 10 (API ระดับ 29) ให้เลือกไม่ใช้ที่กำหนดขอบเขต พื้นที่เก็บข้อมูลและใช้แนวทางสำหรับ Android 9 ต่อไป และต่ำลงเพื่อดำเนินการนี้
ทำงานใน Android 9 หรือต่ำกว่า
ใช้วิธีการต่อไปนี้
- ทำตามแนวทางปฏิบัติแนะนำที่ระบุไว้ในขอสิทธิ์ของแอป
ขอ
WRITE_EXTERNAL_STORAGE
สิทธิ์ - ใช้
MediaStore
API เพื่อแก้ไข หรือลบไฟล์สื่อ
นำเข้ารูปภาพเดียวที่มีอยู่แล้ว
เมื่อต้องการนำเข้ารูปภาพเดียวที่มีอยู่แล้ว (เช่น เมื่อต้องการใช้ เป็นรูปภาพสำหรับโปรไฟล์ของผู้ใช้) แอปของคุณสามารถใช้ UI ของตนเองสำหรับ หรืออาจใช้เครื่องมือเลือกของระบบ
แสดงอินเทอร์เฟซผู้ใช้ของคุณเอง
ใช้วิธีการต่อไปนี้
- ทำตามแนวทางปฏิบัติแนะนำที่ระบุไว้ในขอสิทธิ์ของแอป
ขอ
READ_EXTERNAL_STORAGE
สิทธิ์ - ใช้
query()
API เพื่อค้นหาคอลเล็กชันสื่อ - แสดงผลลัพธ์ใน UI ที่กำหนดเองของแอป
ใช้เครื่องมือเลือกของระบบ
ใช้ACTION_GET_CONTENT
Intent ซึ่งจะขอให้ผู้ใช้เลือกรูปภาพที่จะนำเข้า
หากต้องการกรองประเภทของรูปภาพที่เครื่องมือเลือกของระบบนำเสนอต่อ
ให้ผู้ใช้เลือก คุณก็สามารถใช้
setType()
หรือ EXTRA_MIME_TYPES
จับภาพเดียว
เมื่อต้องการจับภาพเพียงรูปเดียวเพื่อใช้ในแอป (เช่น หากต้องการใช้
เป็นรูปภาพสำหรับโปรไฟล์ของผู้ใช้) ให้ใช้
ACTION_IMAGE_CAPTURE
ขอให้ผู้ใช้ถ่ายรูปโดยใช้กล้องของอุปกรณ์ ระบบ
จัดเก็บภาพที่ถ่ายไว้ใน
ตาราง MediaStore.Images
แชร์ไฟล์สื่อกับแอปอื่นๆ
ใช้เมนู
insert()
เพื่อเพิ่มระเบียนลงใน MediaStore โดยตรง สำหรับข้อมูลเพิ่มเติม โปรดดู
ส่วนเพิ่มรายการของ
คู่มือการใช้พื้นที่เก็บข้อมูลสื่อ
แชร์ไฟล์สื่อกับแอปที่เจาะจง
ใช้คอมโพเนนต์ FileProvider
ของ Android ตามที่อธิบายไว้ในไฟล์การตั้งค่า
และคำแนะนำในการแชร์
เข้าถึงไฟล์จากโค้ดหรือไลบรารีที่ใช้เส้นทางไฟล์โดยตรง
ใช้ตรรกะที่อิงตามเวอร์ชัน Android ที่แอปของคุณใช้
ทำงานใน Android 11
ใช้วิธีการต่อไปนี้
- ทำตามแนวทางปฏิบัติแนะนำที่ระบุไว้ในขอสิทธิ์ของแอป
ขอ
READ_EXTERNAL_STORAGE
สิทธิ์ - เข้าถึงไฟล์โดยใช้เส้นทางไฟล์โดยตรง
สำหรับข้อมูลเพิ่มเติม โปรดดูหัวข้อเกี่ยวกับวิธีเปิดไฟล์สื่อโดยใช้ เส้นทางไฟล์โดยตรง
ทำงานใน Android 10
หากแอปกำหนดเป้าหมายเป็น Android 10 (API ระดับ 29) ให้เลือกไม่ใช้ที่กำหนดขอบเขต พื้นที่เก็บข้อมูลและใช้แนวทางสำหรับ Android 9 ต่อไป และต่ำลงเพื่อดำเนินการนี้
ทำงานใน Android 9 หรือต่ำกว่า
ใช้วิธีการต่อไปนี้
- ทำตามแนวทางปฏิบัติแนะนำที่ระบุไว้ในขอสิทธิ์ของแอป
ขอ
WRITE_EXTERNAL_STORAGE
สิทธิ์ - เข้าถึงไฟล์โดยใช้เส้นทางไฟล์โดยตรง
จัดการไฟล์ที่ไม่ใช่สื่อ
ส่วนนี้อธิบาย Use Case ที่พบบ่อยในการจัดการไฟล์ที่ไม่ใช่สื่อ และอธิบายวิธีระดับสูงที่แอปของคุณสามารถใช้งานได้ ตารางต่อไปนี้ สรุปกรณีการใช้งานแต่ละกรณี และลิงก์ไปยังแต่ละส่วนที่ มีรายละเอียดเพิ่มเติม
กรณีการใช้งาน | สรุป |
---|---|
เปิดไฟล์เอกสาร | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
เขียนไปยังไฟล์ใน วอลุ่มพื้นที่เก็บข้อมูลรอง | ใช้เพียงแนวทางเดียวสำหรับ Android 11 ใช้แนวทางอื่นสำหรับการดำเนินการก่อนหน้านี้ เวอร์ชัน Android |
ย้ายข้อมูลไฟล์ที่มีอยู่จากไฟล์เดิม ตำแหน่งพื้นที่เก็บข้อมูล | ย้ายข้อมูลไฟล์ไปยังพื้นที่เก็บข้อมูลที่กำหนดขอบเขต หากเป็นไปได้ เลือกไม่ใช้ขอบเขต สำหรับ Android 10 เมื่อจำเป็น |
แชร์เนื้อหากับผู้อื่น แอป | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
แคชไฟล์ที่ไม่ใช่สื่อ | ใช้แนวทางเดียวกันสำหรับ Android ทุกเวอร์ชัน |
ส่งออกไฟล์ที่ไม่ใช่สื่อไปยังอุปกรณ์ | ใช้วิธีใดวิธีหนึ่งหากแอปของคุณใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต ใช้ ในกรณีที่แอปของคุณเลือกไม่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต |
เปิดไฟล์เอกสาร
ใช้ACTION_OPEN_DOCUMENT
ที่จะขอให้ผู้ใช้เลือกไฟล์เพื่อเปิดโดยใช้เครื่องมือเลือกของระบบ หากคุณ
ต้องการกรองประเภทไฟล์ที่เครื่องมือเลือกของระบบจะแสดง
ให้ผู้ใช้เลือก คุณก็สามารถใช้
setType()
หรือ EXTRA_MIME_TYPES
เช่น คุณสามารถค้นหาไฟล์ PDF, ODT และ TXT ทั้งหมดโดยใช้สิ่งต่อไปนี้ รหัส:
Kotlin
startActivityForResult( Intent(Intent.ACTION_OPEN_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) type = "*/*" putExtra(Intent.EXTRA_MIME_TYPES, arrayOf( "application/pdf", // .pdf "application/vnd.oasis.opendocument.text", // .odt "text/plain" // .txt )) }, REQUEST_CODE )
Java
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] { "application/pdf", // .pdf "application/vnd.oasis.opendocument.text", // .odt "text/plain" // .txt }); startActivityForResult(intent, REQUEST_CODE);
เขียนไฟล์บนวอลุ่มของพื้นที่เก็บข้อมูลสำรอง
พื้นที่เก็บข้อมูลรองรวมถึงการ์ด SD คุณสามารถเข้าถึงข้อมูลเกี่ยวกับ
ปริมาณพื้นที่เก็บข้อมูลที่กำหนดโดยใช้
StorageVolume
ผสานรวมตรรกะโดยอิงตามเวอร์ชัน Android ที่แอปของคุณใช้
ทำงานใน Android 11
ใช้วิธีการต่อไปนี้
- ใช้รูปแบบพื้นที่เก็บข้อมูลที่กำหนดขอบเขต
- กำหนดเป้าหมายเป็น Android 10 (API ระดับ 29) หรือต่ำกว่า
- ประกาศแอตทริบิวต์
WRITE_EXTERNAL_STORAGE
สิทธิ์ - เข้าถึงด้วยการเข้าถึงประเภทใดประเภทหนึ่งดังต่อไปนี้
- สิทธิ์เข้าถึงไฟล์โดยใช้
MediaStore
API - การเข้าถึงเส้นทางไฟล์โดยตรงโดยใช้ API เช่น
File
หรือfopen()
- สิทธิ์เข้าถึงไฟล์โดยใช้
การทำงานในเวอร์ชันเก่า
ใช้การเข้าถึงพื้นที่เก็บข้อมูล เฟรมเวิร์ก ซึ่งช่วยให้ผู้ใช้ เลือกตำแหน่งบนวอลุ่มพื้นที่เก็บข้อมูลสำรองที่แอปของคุณสามารถเขียน
ย้ายไฟล์ที่มีอยู่จากตำแหน่งพื้นที่เก็บข้อมูลเดิม
ไดเรกทอรีจะถือว่าเป็นตำแหน่งพื้นที่เก็บข้อมูลเดิมหากไม่ใช่ ไดเรกทอรีเฉพาะแอปหรือไดเรกทอรีที่แชร์แบบสาธารณะ หากแอปของคุณสร้างหรือ กินไฟล์ในตำแหน่งพื้นที่เก็บข้อมูลแบบเดิม เราขอแนะนำให้คุณย้ายข้อมูล ไฟล์ของแอปไปยังตำแหน่งที่เข้าถึงได้ด้วยพื้นที่เก็บข้อมูลที่กำหนดขอบเขต และ การเปลี่ยนแปลงที่จำเป็นของแอปเพื่อทำงานกับไฟล์ในพื้นที่เก็บข้อมูลที่กำหนดขอบเขต
รักษาสิทธิ์เข้าถึงตำแหน่งของพื้นที่เก็บข้อมูลเดิมสำหรับการย้ายข้อมูล
แอปของคุณต้องรักษาสิทธิ์เข้าถึงตำแหน่งพื้นที่เก็บข้อมูลแบบเดิมเพื่อ ย้ายข้อมูลไฟล์แอปไปยังตำแหน่งที่เข้าถึงได้ด้วยพื้นที่เก็บข้อมูลที่กำหนดขอบเขต แนวทางที่คุณควรใช้จะขึ้นอยู่กับระดับ API เป้าหมายของแอป
หากแอปกำหนดเป้าหมายเป็น Android 11
ตั้งค่า
preserveLegacyExternalStorage
ทำเครื่องหมายเป็นtrue
เพื่อรักษาพื้นที่เก็บข้อมูลเดิมไว้ โมเดล ดังนั้น ให้แอปของคุณย้ายข้อมูลของผู้ใช้ได้เมื่ออัปเกรดเป็นเวอร์ชันใหม่ แอปที่กําหนดเป้าหมายเป็น Android 11โปรดเลือกไม่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขตต่อไปเพื่อให้ แอปของคุณยังสามารถเข้าถึงไฟล์ในตำแหน่งของพื้นที่เก็บข้อมูลแบบเดิมได้ อุปกรณ์ Android 10
หากแอปกำหนดเป้าหมายเป็น Android 10
เลือกไม่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต เพื่อให้ดำเนินการ ทำงานของแอปในเวอร์ชัน Android อยู่เสมอ
ย้ายข้อมูลแอป
เมื่อแอปพร้อมย้ายข้อมูล ให้ใช้วิธีการต่อไปนี้
- กำหนดเป้าหมายเป็น Android 10 หรือต่ำกว่า
- เลือกไม่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต เพื่อให้ แอปของคุณมีสิทธิ์เข้าถึงไฟล์ที่คุณต้องย้ายข้อมูล
-
ทำให้โค้ดที่ใช้
File
API ใช้งานได้เพื่อย้ายไฟล์จากไฟล์ ตำแหน่งปัจจุบันภายใต้/sdcard/
ไปยังตำแหน่งที่เข้าถึงได้ ด้วยพื้นที่เก็บข้อมูลที่กำหนดขอบเขต:- ย้ายไฟล์แอปส่วนตัวไปยังไดเรกทอรีที่ส่งคืนโดย
getExternalFilesDir()
- ย้ายไฟล์ที่ไม่ใช่สื่อที่แชร์ไปยังไดเรกทอรีย่อยสำหรับแอปโดยเฉพาะของ
ไดเรกทอรี
Downloads/
- ย้ายไฟล์แอปส่วนตัวไปยังไดเรกทอรีที่ส่งคืนโดย
- นำไดเรกทอรีพื้นที่เก็บข้อมูลเดิมของแอปออกจาก
ไดเรกทอรี
/sdcard/
หลังจากที่ผู้ใช้ติดตั้งแอปเวอร์ชันใหม่แล้ว ผู้ใช้จะกรอกข้อมูลให้เสร็จสมบูรณ์ ขั้นตอนการย้ายข้อมูลในอุปกรณ์ของผู้ใช้ คุณตรวจสอบกระบวนการย้ายข้อมูลได้ ฐานผู้ใช้ด้วยการสร้างเหตุการณ์ Analytics
หลังจากผู้ใช้ย้ายข้อมูลแล้ว ให้เผยแพร่อัปเดตอีกรายการหนึ่งในแอป โดยที่ ที่คุณกำหนดเป้าหมายเป็น Android 11
แชร์เนื้อหากับแอปอื่นๆ
หากต้องการแชร์ไฟล์ของแอปกับแอปอื่นๆ เพียงแอปเดียว ให้ใช้
FileProvider
สำหรับแอปที่ทุกคนต้องแชร์
ระหว่างกัน ขอแนะนำให้ใช้เนื้อหา
ผู้ให้บริการสำหรับแต่ละแอปและ
ระบบจะซิงค์ข้อมูลเมื่อเพิ่มแอปลงในคอลเล็กชัน
แคชไฟล์ที่ไม่ใช่สื่อ
วิธีที่คุณควรใช้จะขึ้นอยู่กับประเภทไฟล์ที่ต้องการ เพื่อแคช
- ไฟล์ขนาดเล็กหรือไฟล์ที่มีข้อมูลที่ละเอียดอ่อน: ใช้
Context#getCacheDir()
- ไฟล์ขนาดใหญ่หรือไฟล์ที่ไม่มีข้อมูลที่ละเอียดอ่อน: ใช้
Context#getExternalCacheDir()
ส่งออกไฟล์ที่ไม่ใช่สื่อไปยังอุปกรณ์
กำหนดตำแหน่งเริ่มต้นที่เหมาะสมเพื่อจัดเก็บเนื้อหาที่ไม่ใช่สื่อ อนุญาตให้ผู้ใช้ส่งออกไฟล์จาก ไดเรกทอรีเฉพาะแอปไปยังตำแหน่งที่เข้าถึงได้อย่างทั่วถึงมากขึ้น ใช้การดาวน์โหลดหรือคอลเล็กชันเอกสารของ MediaStore เพื่อส่งออกไฟล์ที่ไม่ใช่สื่อไปยัง อุปกรณ์
เลือกไม่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขตชั่วคราว
ก่อนที่แอปจะทํางานร่วมกับพื้นที่เก็บข้อมูลที่กำหนดขอบเขตได้โดยสมบูรณ์ คุณจะเลือกชั่วคราวได้ ทั้งในการทดสอบและเวอร์ชันที่ใช้งานจริง แอป
เลือกไม่ใช้การทดสอบ
ใน Android 10 (API ระดับ 29) ขึ้นไป การทดสอบของแอปจะดำเนินการในพื้นที่เก็บข้อมูล แซนด์บ็อกซ์โดยค่าเริ่มต้น แซนด์บ็อกซ์นี้ป้องกันไม่ให้แอปของคุณเข้าถึงไฟล์จากภายนอก ไดเรกทอรีเฉพาะแอปและไดเรกทอรีที่แชร์แบบสาธารณะ
หากการทดสอบแสดงไฟล์สำหรับโฮสต์ เช่น ภาพหน้าจอ ข้อมูลการแก้ไขข้อบกพร่อง
ข้อมูลการครอบคลุม หรือเมตริกประสิทธิภาพ คุณสามารถเขียนไฟล์เหล่านี้ไปยังทั่วโลก
ไดเรกทอรี ในการดำเนินการดังกล่าว ให้เพิ่ม Flag ต่อไปนี้ในการควบคุมที่เกี่ยวข้อง
เรียก am instrument
:
-e no-isolated-storage 1
การตั้งค่าสถานะนี้จะส่งผลต่อลักษณะการทำงานทั้งหมดของกรอบการทดสอบการวัดคุม และส่งผลต่อทั้งหมด
โค้ดทดสอบที่เรียกใช้ ดังนั้น เมื่อคุณใช้แฟล็กนี้ คุณจะไม่สามารถตรวจสอบความถูกต้องของ
ความเข้ากันได้ของแอปกับพื้นที่เก็บข้อมูลที่กำหนดขอบเขต สำหรับเอาต์พุตทดสอบ คุณควร
เขียนลงในพื้นที่เก็บข้อมูลที่กำหนดขอบเขตระดับแอปซึ่ง Shell อ่านได้ จากนั้นคุณจะสามารถดึง
ไดเรกทอรีที่กำหนดขอบเขตระดับแอป หากต้องการกำหนดว่าจะดึงข้อมูลจากไดเรกทอรีใด ให้เรียกใช้
getExternalMediaDirs()
เลือกไม่ใช้ในแอปเวอร์ชันที่ใช้งานจริง
หากแอปกำหนดเป้าหมายเป็น Android 10 (API ระดับ 29) หรือต่ำกว่า คุณจะเลือกชั่วคราวได้
จากพื้นที่เก็บข้อมูลที่กำหนดขอบเขตในแอปเวอร์ชันที่ใช้งานจริง หากกำหนดเป้าหมาย
แต่ Android 10 คุณต้องกำหนดค่า
requestLegacyExternalStorage
ไปยัง true
ในไฟล์ Manifest ของแอป
<manifest ... > <!-- This attribute is "false" by default on apps targeting Android 10. --> <application android:requestLegacyExternalStorage="true" ... > ... </application> </manifest>
หากต้องการทดสอบลักษณะการทำงานของแอปที่กำหนดเป้าหมายเป็น Android 10 หรือต่ำกว่า
ซึ่งใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต คุณสามารถเลือกใช้ลักษณะการทำงานนี้ได้โดยกำหนดค่า
requestLegacyExternalStorage
ไปยัง false
หากทดสอบในอุปกรณ์ที่
ใช้ Android 11 คุณยังสามารถใช้ความเข้ากันได้ของแอป
ทั้งหมดเพื่อทดสอบ
ลักษณะการทำงานของแอปที่มีหรือไม่มีพื้นที่เก็บข้อมูลที่กำหนดขอบเขต
แหล่งข้อมูลเพิ่มเติม
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับพื้นที่เก็บข้อมูลของ Android โปรดดูสื่อต่อไปนี้