จัดการไฟล์ทั้งหมดในอุปกรณ์จัดเก็บข้อมูล

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

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

ขอสิทธิ์เข้าถึงไฟล์ทั้งหมด

แอปสามารถขอสิทธิ์เข้าถึงไฟล์ทั้งหมดจากผู้ใช้ได้โดยทำดังนี้

  1. ประกาศแอตทริบิวต์ MANAGE_EXTERNAL_STORAGE ในไฟล์ Manifest
  2. ใช้เมนู ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION การดำเนินการผ่าน Intent เพื่อนำผู้ใช้ไปยังหน้าการตั้งค่าระบบที่ผู้ใช้จะเปิดใช้ได้ ตัวเลือกต่อไปนี้สําหรับแอป อนุญาตให้เข้าถึงเพื่อจัดการไฟล์ทั้งหมด

เพื่อดูว่าแอปได้รับสิทธิ์MANAGE_EXTERNAL_STORAGEหรือไม่ สิทธิ์, โทร Environment.isExternalStorageManager()

การดำเนินการที่ได้รับอนุญาตโดย MANAGE_EXTERNAL_STORAGE

สิทธิ์ MANAGE_EXTERNAL_STORAGE ให้สิทธิ์ต่อไปนี้

  • สิทธิ์การอ่านและการเขียนไฟล์ทั้งหมดภายในที่แชร์ พื้นที่เก็บข้อมูล

  • การเข้าถึงเนื้อหาของ ตาราง MediaStore.Files

  • สิทธิ์เข้าถึงไดเรกทอรีรากของทั้งไดรฟ์ USB แบบใช้ได้ทุกที่ทุกเวลา (OTG) และ SD

  • สิทธิ์การเขียนไดเรกทอรีที่จัดเก็บข้อมูลภายในทั้งหมด⁠ ยกเว้น /Android/data/, /sdcard/Android และไดเรกทอรีย่อยส่วนใหญ่ของ /sdcard/Android สิทธิ์การเขียนนี้รวมถึงไฟล์โดยตรง เส้นทาง

    แอปที่ได้รับสิทธิ์นี้จะยังคงไม่สามารถเข้าถึง ไดเรกทอรีที่เป็นของแอปอื่นๆ เนื่องจากไดเรกทอรีเหล่านี้ปรากฏเป็นไดเรกทอรีย่อยของ Android/data/ ใน วอลุ่มพื้นที่เก็บข้อมูล

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

วันที่
รูปที่ 1 คำเตือน Lint ใน Android Studio ที่เตือนนักพัฒนาซอฟต์แวร์เกี่ยวกับ นโยบายของ Google Play เกี่ยวกับ MANAGE_EXTERNAL_STORAGE สิทธิ์

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

  • ตัวจัดการไฟล์
  • แอปสำรองและกู้คืนข้อมูล
  • แอปป้องกันไวรัส
  • แอปการจัดการเอกสาร
  • การค้นหาไฟล์ในอุปกรณ์
  • การเข้ารหัสดิสก์และไฟล์
  • การย้ายข้อมูลระหว่างอุปกรณ์