Android 11 ช่วยให้ผู้ใช้ระบุได้ละเอียดยิ่งขึ้น สิทธิ์เข้าถึงตำแหน่ง ไมโครโฟน และกล้อง นอกจากนี้ ระบบ รีเซ็ตสิทธิ์ของแอปที่ไม่ได้ใช้ซึ่งกำหนดเป้าหมายเป็น Android 11 หรือ และแอปอาจจำเป็นต้องอัปเดตสิทธิ์ที่แจ้งไว้หาก ใช้หน้าต่างแจ้งเตือนของระบบหรืออ่านข้อมูลที่เกี่ยวข้องกับหมายเลขโทรศัพท์
สิทธิ์ครั้งเดียว
ตั้งแต่ Android 11 เป็นต้นไป เมื่อใดก็ตามที่แอปขอสิทธิ์ เกี่ยวข้องกับตำแหน่ง ไมโครโฟน หรือกล้อง กล่องโต้ตอบสิทธิ์ที่แสดงต่อผู้ใช้ มีตัวเลือกชื่อเฉพาะครั้งนี้ หากผู้ใช้เลือกตัวเลือกนี้ ในกล่องโต้ตอบ แอปของคุณจะได้รับสิทธิ์แบบครั้งเดียวชั่วคราว
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ระบบจัดการแบบครั้งเดียว สิทธิ์
รีเซ็ตสิทธิ์อัตโนมัติจากแอปที่ไม่ได้ใช้
หากแอปกำหนดเป้าหมายเป็น Android 11 ขึ้นไปและไม่มีการใช้งานสำหรับผู้ใช้บางกลุ่ม ระบบจะปกป้องข้อมูลผู้ใช้ด้วยการรีเซ็ตข้อมูลที่ละเอียดอ่อนโดยอัตโนมัติ สิทธิ์รันไทม์ที่ผู้ใช้ให้สิทธิ์แอปของคุณ การดำเนินการนี้มี ราวกับว่าผู้ใช้ดูสิทธิ์ในการตั้งค่าระบบ และเปลี่ยน ระดับการเข้าถึงปฏิเสธของแอป หากแอปเป็นไปตามแนวทางปฏิบัติแนะนำสำหรับ ขอสิทธิ์ระหว่างรันไทม์ ไม่ต้องทำการเปลี่ยนแปลงใดๆ กับแอป เพราะในฐานะผู้ใช้ มีการโต้ตอบกับฟีเจอร์ต่างๆ ในแอป คุณควรยืนยันว่าฟีเจอร์เหล่านั้น สิทธิ์ที่จำเป็น
เรียนรู้เพิ่มเติมว่าระบบรีเซ็ตสิทธิ์ที่ไม่ได้ใช้โดยอัตโนมัติอย่างไร แอป
ระดับการเข้าถึงกล่องโต้ตอบสิทธิ์
ใน 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
ในระหว่างการทดสอบ คุณอาจต้องรีเซ็ต Flag เหล่านี้เพื่อให้แน่ใจว่าผู้ทดสอบจะไม่ ประหลาดใจเมื่อกล่องโต้ตอบคำขอไม่แสดงขึ้น โดยใช้คำสั่งต่อไปนี้
adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed
PERMISSION_NAME คือชื่อของสิทธิ์ที่คุณต้องการ รีเซ็ต หากต้องการดูรายการสิทธิ์ของแอป Android ทั้งหมด ให้ไปที่ permissions 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
ได้รับสิทธิ์โดยอัตโนมัติ เว้นแต่ว่าผู้ใช้จะปฏิเสธการให้สิทธิ์แอปอย่างชัดแจ้ง เมื่อแอป หยุดจับภาพหน้าจอ จะทำให้สูญเสียสิทธิ์ กรณีการใช้งานนี้หลัก ที่มีไว้สำหรับแอปสตรีมมิงแบบสดเกม
แอปเหล่านี้ไม่จำเป็นต้องส่ง
ACTION_MANAGE_OVERLAY_PERMISSION
เพื่อรับสิทธิ์ SYSTEM_ALERT_WINDOW
แอปสามารถขอเพียงแค่
SYSTEM_ALERT_WINDOW
โดยตรง
MANAGE_OVERLAY_PERMISSION จะนำผู้ใช้ไปยังหน้าจอสิทธิ์ของระบบเสมอ
เริ่มตั้งแต่ Android 11
ACTION_MANAGE_OVERLAY_PERMISSION
Intent จะนำผู้ใช้ไปยังหน้าจอการตั้งค่าระดับบนสุดเสมอ โดยที่
ผู้ใช้สามารถอนุญาตหรือเพิกถอน
SYSTEM_ALERT_WINDOW
สิทธิ์ของแอป ระบบจะไม่สนใจข้อมูล package:
ใน Intent
ใน Android เวอร์ชันก่อนหน้า Intent ACTION_MANAGE_OVERLAY_PERMISSION
สามารถระบุแพ็กเกจ ซึ่งจะนำผู้ใช้ไปยังหน้าจอเฉพาะแอป
สำหรับการจัดการสิทธิ์ ระบบจะไม่รองรับฟังก์ชันนี้ตั้งแต่วันที่
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