แอปส่วนใหญ่ที่ต้องเข้าถึงพื้นที่เก็บข้อมูลที่ใช้ร่วมกันสามารถทำตามแนวทางปฏิบัติแนะนำสำหรับการแชร์ไฟล์สื่อและการแชร์ไฟล์ที่ไม่ใช่สื่อ อย่างไรก็ตาม แอปบางแอปมีกรณีการใช้งานหลักที่ต้องใช้สิทธิ์เข้าถึงแบบกว้างสำหรับไฟล์ในอุปกรณ์ แต่ไม่สามารถเข้าถึงไฟล์ได้อย่างมีประสิทธิภาพโดยใช้แนวทางปฏิบัติแนะนำด้านพื้นที่เก็บข้อมูลที่เคารพความเป็นส่วนตัว Android มีสิทธิ์เข้าถึงพิเศษของแอปที่เรียกว่าการเข้าถึงไฟล์ทั้งหมดสำหรับสถานการณ์เหล่านี้
ตัวอย่างเช่น กรณีการใช้งานหลักของแอปป้องกันไวรัสอาจต้องมีการสแกนไฟล์จำนวนมากในไดเรกทอรีต่างๆ เป็นประจำ หากการสแกนนี้ต้องมีการโต้ตอบของผู้ใช้ซ้ำๆ เพื่อเลือกไดเรกทอรีโดยใช้เครื่องมือเลือกไฟล์ของระบบ ก็จะทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี กรณีการใช้งานอื่นๆ เช่น โปรแกรมจัดการไฟล์ แอปสำรองและกู้คืนข้อมูล และแอปการจัดการเอกสาร ต้องมีการพิจารณาที่คล้ายกัน
ขอสิทธิ์เข้าถึงไฟล์ทั้งหมด
แอปสามารถขอสิทธิ์เข้าถึงไฟล์ทั้งหมดจากผู้ใช้ได้โดยทำดังนี้
- ประกาศสิทธิ์
MANAGE_EXTERNAL_STORAGEในไฟล์ Manifest - ใช้การดำเนินการตาม Intent
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSIONเพื่อนำผู้ใช้ไปยังหน้าการตั้งค่าระบบที่ผู้ใช้สามารถเปิดใช้ตัวเลือกอนุญาตให้เข้าถึงเพื่อจัดการไฟล์ทั้งหมดสำหรับแอปของคุณ
หากต้องการตรวจสอบว่าแอปของคุณได้รับสิทธิ์ MANAGE_EXTERNAL_STORAGE หรือไม่ ให้เรียกใช้ Environment.isExternalStorageManager()
การดำเนินการที่ได้รับอนุญาตจาก MANAGE_EXTERNAL_STORAGE
สิทธิ์ MANAGE_EXTERNAL_STORAGE จะให้สิทธิ์ต่อไปนี้
สิทธิ์อ่านและเขียนไฟล์ทั้งหมดภายในพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน
สิทธิ์เข้าถึงเนื้อหาของตาราง
MediaStore.Filesสิทธิ์เข้าถึงไดเรกทอรีรากของทั้งไดรฟ์ USB On-The-Go (OTG) และการ์ด SD
สิทธิ์เขียนในไดเรกทอรีพื้นที่เก็บข้อมูลภายในทั้งหมด ยกเว้น
/Android/data/,/sdcard/Androidและไดเรกทอรีย่อยส่วนใหญ่ของ/sdcard/Androidสิทธิ์เขียนนี้รวมถึงสิทธิ์เข้าถึงเส้นทางไฟล์โดยตรงแอปที่ได้รับสิทธิ์นี้จะยังคงเข้าถึงไดเรกทอรีเฉพาะแอปที่เป็นของแอปอื่นๆ ไม่ได้ เนื่องจากไดเรกทอรีเหล่านี้ปรากฏเป็นไดเรกทอรีย่อยของ
Android/data/ในวอลุ่มพื้นที่เก็บข้อมูล
เมื่อแอปมีสิทธิ์ MANAGE_EXTERNAL_STORAGE แอปจะเข้าถึงไฟล์และไดเรกทอรีเพิ่มเติมเหล่านี้ได้โดยใช้ API MediaStore หรือเส้นทางไฟล์โดยตรง อย่างไรก็ตาม เมื่อใช้เฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูล คุณจะเข้าถึงไฟล์หรือไดเรกทอรีได้ก็ต่อเมื่อสามารถทำได้โดยไม่ต้องมีสิทธิ์ MANAGE_EXTERNAL_STORAGE
เรียกใช้กิจกรรมการจัดการพื้นที่เก็บข้อมูลของแอปอื่น
ใน Android 12 (API ระดับ 31) ขึ้นไป แอปที่มีทั้งสิทธิ์
MANAGE_EXTERNAL_STORAGE
และสิทธิ์
QUERY_ALL_PACKAGES
เช่น แอปจัดการไฟล์ จะใช้
getManageSpaceActivityIntent()
เพื่อส่งผู้ใช้ไปยังกิจกรรมการจัดการพื้นที่ที่กำหนดเองของแอปอื่นได้
เมธอด getManageSpaceActivityIntent() จะรับชื่อแพ็กเกจและรหัสคำขอ และจะแสดงผลอย่างใดอย่างหนึ่งต่อไปนี้
PendingIntentหากแอปที่มีชื่อแพ็กเกจที่ระบุได้กำหนดกิจกรรม "จัดการพื้นที่" ที่กำหนดเองไว้ จากนั้นแอปการจัดการไฟล์ที่เรียกใช้เมธอดgetManageSpaceActivityIntent()จะเรียกใช้ Intent ที่แสดงผลเพื่อส่งผู้ใช้ไปยังกิจกรรมที่กำหนดเองได้nullหากแอปที่มีชื่อแพ็กเกจที่ระบุไม่ได้กำหนดกิจกรรม "จัดการพื้นที่"
เปิดใช้ MANAGE_EXTERNAL_STORAGE สำหรับการทดสอบ
หากต้องการสำรวจว่าสิทธิ์ MANAGE_EXTERNAL_STORAGE ส่งผลต่อแอปอย่างไร คุณสามารถเปิดใช้สิทธิ์เพื่อทดสอบได้ โดยเรียกใช้คำสั่งต่อไปนี้ในเครื่องที่เชื่อมต่อกับอุปกรณ์ทดสอบ
adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow
ประกาศจาก Google Play
ส่วนนี้จะแสดงประกาศสำหรับนักพัฒนาแอปที่เผยแพร่แอปใน Google Play
เพื่อจำกัดการเข้าถึงพื้นที่เก็บข้อมูลที่ใช้ร่วมกันในวงกว้าง Google Play Store ได้อัปเดตนโยบายเพื่อประเมินแอปที่กำหนดเป้าหมายเป็น Android 11 (ระดับ API 30) ขึ้นไป และขอสิทธิ์เข้าถึงไฟล์ทั้งหมดผ่านสิทธิ์ MANAGE_EXTERNAL_STORAGE นโยบายนี้มีผลบังคับใช้ตั้งแต่เดือนพฤษภาคม 2021
เมื่อแอปกำหนดเป้าหมายเป็น Android 11 ขึ้นไปและประกาศสิทธิ์ MANAGE_EXTERNAL_STORAGE Android Studio จะแสดงคำเตือน Lint ที่ปรากฏในรูปที่ 1 คำเตือนนี้เป็นการช่วยเตือนคุณว่า Google Play Store มีนโยบายที่จำกัดการใช้สิทธิ์
MANAGE_EXTERNAL_STORAGE
ขอสิทธิ์ MANAGE_EXTERNAL_STORAGE เฉพาะเมื่อแอปไม่สามารถใช้ API ที่เคารพความเป็นส่วนตัวมากขึ้นอย่างมีประสิทธิภาพ เช่น เฟรมเวิร์กการเข้าถึงพื้นที่เก็บข้อมูลหรือ Media Store API การใช้งานสิทธิ์ของแอปต้องอยู่ภายใต้การใช้งานที่อนุญาต และต้องเชื่อมโยงโดยตรงกับฟังก์ชันหลักของแอป หากแอปของคุณมีกรณีการใช้งานที่คล้ายกับกรณีต่อไปนี้ ก็มีแนวโน้มว่าจะขอสิทธิ์ MANAGE_EXTERNAL_STORAGE ได้
- ตัวจัดการไฟล์
- แอปสำรองและกู้คืนข้อมูล
- แอปป้องกันไวรัส
- แอปการจัดการเอกสาร
- การค้นหาไฟล์ในอุปกรณ์
- การเข้ารหัสดิสก์และไฟล์
- การย้ายข้อมูลจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง