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
ในระหว่างการทดสอบ คุณอาจต้องรีเซ็ต Flag เหล่านี้เพื่อให้ผู้ทดสอบไม่แปลกใจเมื่อกล่องโต้ตอบคำขอไม่แสดง โดยใช้คำสั่งต่อไปนี้
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
จะได้รับสิทธิ์โดยอัตโนมัติ เว้นแต่ผู้ใช้จะปฏิเสธสิทธิ์แก่แอปอย่างชัดเจน เมื่อแอปหยุดจับภาพหน้าจอ สิทธิ์ดังกล่าวจะหายไป กรณีการใช้งานนี้มีไว้สำหรับแอปสตรีมเกมแบบสดเป็นหลัก
แอปเหล่านี้ไม่จำเป็นต้องส่ง ACTION_MANAGE_OVERLAY_PERMISSION
เพื่อขอรับสิทธิ์ SYSTEM_ALERT_WINDOW
เนื่องจากแอปจะขอ SYSTEM_ALERT_WINDOW
ได้โดยตรง
MANAGE_OVERLAY_PERMISSION จะนำผู้ใช้ไปยังหน้าจอสิทธิ์ของระบบเสมอ
ใน Android 11 เป็นต้นไป
ACTION_MANAGE_OVERLAY_PERMISSION
ความตั้งใจจะนำผู้ใช้ไปยังหน้าจอการตั้งค่าระดับบนสุดเสมอ ซึ่งผู้ใช้สามารถอนุญาตหรือเพิกถอนสิทธิ์
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