Android 11 ช่วยให้ผู้ใช้ระบุสิทธิ์ที่ละเอียดยิ่งขึ้นสำหรับตำแหน่ง ไมโครโฟน และกล้องได้ นอกจากนี้ ระบบยังรีเซ็ตสิทธิ์ของแอปที่ไม่ได้ใช้ซึ่งกำหนดเป้าหมายเป็น Android 11 ขึ้นไป และแอปอาจต้องอัปเดตสิทธิ์ที่ประกาศไว้หากใช้หน้าต่างแจ้งเตือนของระบบหรืออ่านข้อมูลที่เกี่ยวข้องกับหมายเลขโทรศัพท์
สิทธิ์ครั้งเดียว
ตั้งแต่ Android 11 เป็นต้นไป เมื่อใดก็ตามที่แอปขอสิทธิ์ที่เกี่ยวข้องกับตำแหน่ง ไมโครโฟน หรือกล้อง กล่องโต้ตอบสิทธิ์ที่ผู้ใช้เห็นจะมีตัวเลือกที่ชื่อว่าครั้งนี้เท่านั้น หากผู้ใช้เลือกตัวเลือกนี้ในกล่องโต้ตอบ แอปของคุณจะได้รับ สิทธิ์ครั้งเดียวชั่วคราว
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ระบบจัดการสิทธิ์ครั้งเดียว
รีเซ็ตสิทธิ์จากแอปที่ไม่ได้ใช้โดยอัตโนมัติ
หากแอปของคุณกำหนดเป้าหมายเป็น Android 11 ขึ้นไปและไม่ได้ใช้งานมา 2-3 เดือน ระบบจะปกป้องข้อมูลผู้ใช้โดยการรีเซ็ตสิทธิ์รันไทม์ที่มีความละเอียดอ่อนซึ่งผู้ใช้เคยให้ไว้กับแอปโดยอัตโนมัติ การดำเนินการนี้มีผลเช่นเดียวกับกรณีที่ผู้ใช้ดูสิทธิ์ในการตั้งค่าระบบและเปลี่ยนระดับการเข้าถึงของแอปเป็นปฏิเสธ หากแอปของคุณทำตามแนวทางปฏิบัติแนะนำสำหรับ การขอสิทธิ์ในรันไทม์ คุณ ไม่ควรต้องทำการเปลี่ยนแปลงใดๆ กับแอป เนื่องจากคุณควรตรวจสอบว่าฟีเจอร์ต่างๆ มี สิทธิ์ที่จำเป็นเมื่อผู้ใช้ โต้ตอบกับฟีเจอร์ในแอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ระบบรีเซ็ตสิทธิ์ของแอปที่ไม่ได้ใช้ โดยอัตโนมัติ
ระดับการเข้าถึงกล่องโต้ตอบสิทธิ์
ตั้งแต่ Android 11 เป็นต้นไป หากผู้ใช้แตะปฏิเสธ สำหรับสิทธิ์หนึ่งๆ มากกว่า 1 ครั้งตลอดอายุการติดตั้งแอปในอุปกรณ์ ผู้ใช้จะไม่เห็นกล่องโต้ตอบสิทธิ์ของระบบหากแอปขอสิทธิ์ดังกล่าวอีกครั้ง การดำเนินการของผู้ใช้หมายความว่า "ไม่ต้องถามอีก" ในเวอร์ชันก่อนหน้า ผู้ใช้จะเห็นกล่องโต้ตอบสิทธิ์ของระบบทุกครั้งที่แอปขอสิทธิ์ เว้นแต่ผู้ใช้จะเลือกช่องทำเครื่องหมายหรือตัวเลือก "ไม่ต้องถามอีก" ไว้ก่อนหน้านี้ การเปลี่ยนแปลงลักษณะการทำงานนี้ใน Android 11 จะช่วยลดการขอสิทธิ์ซ้ำๆ ที่ผู้ใช้เลือกปฏิเสธ
หากต้องการระบุว่าแอปถูกปฏิเสธสิทธิ์อย่างถาวรหรือไม่ (เพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่องและการทดสอบ) ให้ใช้คำสั่งต่อไปนี้
adb shell dumpsys package PACKAGE_NAME
โดย PACKAGE_NAME คือชื่อแพ็กเกจที่จะตรวจสอบ
เอาต์พุตของคำสั่งจะมีส่วนต่างๆ ที่มีลักษณะดังนี้
... runtime permissions: android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] ...
สิทธิ์ที่ผู้ใช้ปฏิเสธไปแล้ว 1 ครั้งจะมีการติดแฟล็ก USER_SET
สิทธิ์ที่ถูกปฏิเสธอย่างถาวรโดยการเลือกปฏิเสธ 2 ครั้งจะมีการติดแฟล็ก USER_FIXED
ในระหว่างการทดสอบ คุณอาจต้องการรีเซ็ตแฟล็กเหล่านี้เพื่อให้ผู้ทดสอบไม่แปลกใจเมื่อระบบไม่แสดงกล่องโต้ตอบคำขอ หากต้องการทำเช่นนี้ ให้ใช้คำสั่ง
adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed
PERMISSION_NAME คือชื่อสิทธิ์ที่ต้องการ รีเซ็ต หากต้องการดูรายการสิทธิ์ของแอป Android ทั้งหมด โปรดไปที่หน้าเอกสารอ้างอิงAPI ของสิทธิ์
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดการการปฏิเสธสิทธิ์ในแอป
การเปลี่ยนแปลงหน้าต่างแจ้งเตือนของระบบ
Android 11 มีการเปลี่ยนแปลงหลายอย่างเกี่ยวกับวิธีที่แอปได้รับสิทธิ์
SYSTEM_ALERT_WINDOW
การเปลี่ยนแปลงนี้มีจุดประสงค์เพื่อปกป้องผู้ใช้ โดยทำให้การให้สิทธิ์เป็นไปโดยตั้งใจมากขึ้น
แอปบางประเภทจะได้รับสิทธิ์ SYSTEM_ALERT_WINDOW โดยอัตโนมัติเมื่อมีการขอ
แอปบางประเภทจะได้รับสิทธิ์ SYSTEM_ALERT_WINDOW โดยอัตโนมัติเมื่อมีการขอ ดังนี้
แอปใดก็ตามที่มี
ROLE_CALL_SCREENINGและขอSYSTEM_ALERT_WINDOWจะได้รับสิทธิ์โดยอัตโนมัติ หากแอปเสียROLE_CALL_SCREENINGแอปจะเสียสิทธิ์ดังกล่าวแอปที่จับภาพหน้าจอผ่าน
MediaProjectionและขอSYSTEM_ALERT_WINDOWจะได้รับสิทธิ์โดยอัตโนมัติ เว้นแต่ผู้ใช้จะปฏิเสธสิทธิ์ของแอปอย่างชัดแจ้ง เมื่อแอป หยุดจับภาพหน้าจอ แอปจะเสียสิทธิ์ดังกล่าว Use Case นี้มีไว้สำหรับแอปไลฟ์สดเกมเป็นหลัก
แอปเหล่านี้ไม่จำเป็นต้องส่ง
ACTION_MANAGE_OVERLAY_PERMISSION
เพื่อรับสิทธิ์ SYSTEM_ALERT_WINDOW โดยแอปสามารถขอ
SYSTEM_ALERT_WINDOW ได้โดยตรง
Intent MANAGE_OVERLAY_PERMISSION จะนำผู้ใช้ไปยังหน้าจอสิทธิ์ของระบบเสมอ
ตั้งแต่ Android 11 เป็นต้นไป
ACTION_MANAGE_OVERLAY_PERMISSION
Intent จะนำผู้ใช้ไปยังหน้าจอการตั้งค่าระดับบนสุดเสมอ ซึ่งผู้ใช้สามารถให้หรือเพิกถอนสิทธิ์
SYSTEM_ALERT_WINDOW
สำหรับแอปได้ ระบบจะไม่สนใจ package: ใน Intent
ใน Android เวอร์ชันก่อนหน้า ACTION_MANAGE_OVERLAY_PERMISSION Intent จะสามารถระบุแพ็กเกจได้ ซึ่งจะนำผู้ใช้ไปยังหน้าจอเฉพาะแอปเพื่อจัดการสิทธิ์ Android 11 ไม่รองรับฟังก์ชันนี้ โดยผู้ใช้ต้องเลือกแอปที่ต้องการให้สิทธิ์หรือเพิกถอนสิทธิ์ก่อนแทน การเปลี่ยนแปลงนี้มีวัตถุประสงค์เพื่อปกป้องผู้ใช้ โดยทำให้การให้สิทธิ์เป็นไปโดยตั้งใจมากขึ้น
หมายเลขโทรศัพท์
Android 11 เปลี่ยนสิทธิ์ที่เกี่ยวข้องกับโทรศัพท์ซึ่งแอปใช้เมื่ออ่านหมายเลขโทรศัพท์
หากแอปของคุณกำหนดเป้าหมายเป็น Android 11 ขึ้นไปและต้องเข้าถึง
API หมายเลขโทรศัพท์ที่แสดงในรายการต่อไปนี้ คุณต้องขอสิทธิ์
READ_PHONE_NUMBERS
แทนสิทธิ์ READ_PHONE_STATE
- เมธอด
getLine1Number()ในคลาสTelephonyManagerและคลาสTelecomManager - เมธอด
getMsisdn()ที่ไม่รองรับในคลาสTelephonyManager
หากแอปประกาศ READ_PHONE_STATE เพื่อเรียกเมธอดอื่นๆ นอกเหนือจากเมธอดในรายการก่อนหน้า คุณสามารถขอ READ_PHONE_STATE ต่อไปได้ใน Android ทุกเวอร์ชัน อย่างไรก็ตาม หากคุณใช้สิทธิ์ READ_PHONE_STATE สำหรับเมธอดในรายการก่อนหน้าเท่านั้น ให้อัปเดตไฟล์ Manifest ดังนี้
- เปลี่ยนการประกาศ
READ_PHONE_STATEเพื่อให้แอปใช้สิทธิ์เฉพาะใน Android 10 (ระดับ API 29) และต่ำกว่า - เพิ่มสิทธิ์
READ_PHONE_NUMBERS
ข้อมูลโค้ดการประกาศในไฟล์ Manifest ต่อไปนี้แสดงกระบวนการนี้
<manifest> <!-- Grants the READ_PHONE_STATE permission only on devices that run Android 10 (API level 29) and lower. --> <uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> </manifest>
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงสิทธิ์ใน Android 11 ได้จากเนื้อหาต่อไปนี้
วิดีโอ
การพัฒนาด้วยการเปลี่ยนแปลงด้านความเป็นส่วนตัวล่าสุดใน Android 11