สิทธิ์รันไทม์ใน Android 6 ขึ้นไปช่วยให้ผู้ใช้ควบคุมได้ว่าจะอนุญาตให้บันทึกเสียงจากไมโครโฟนของอุปกรณ์หรือวิดีโอจากกล้องของอุปกรณ์เมื่อใด ก่อนที่แอปจะบันทึกได้ ผู้ใช้ต้องให้หรือปฏิเสธ สิทธิ์ผ่านกล่องโต้ตอบที่ระบบแสดง
Android 12 มอบความโปร่งใสให้แก่ผู้ใช้โดย การแสดงสัญญาณบอกสถานะเมื่อแอปใช้แหล่งข้อมูลส่วนตัวผ่านกล้อง และสิทธิ์การดำเนินการของแอปสำหรับไมโครโฟน บันทึกการดำเนินการของแอปจะบันทึกการเข้าถึง API ที่ได้รับการปกป้องด้วยสิทธิ์รันไทม์
App-op จะติดตามทั้งสถานะกิจกรรมและจํานวนการเรียก API แต่ละรายการ และโต้ตอบกับสัญญาณบอกสถานะไมโครโฟนและกล้องถ่ายรูปใน Android 12 เพื่อแสดงให้ผู้ใช้เห็นเมื่อแอปเข้าถึงข้อมูลเสียงและกล้องถ่ายรูปในอุปกรณ์ เมื่อผู้ใช้คลิกสัญญาณบอกสถานะไมโครโฟนหรือกล้อง ผู้ใช้จะเห็นว่าแอปใด เข้าถึงข้อมูลของตน ฟีเจอร์นี้เป็นฟีเจอร์ที่จำเป็นสำหรับ OEM ทุกราย
ข้อกำหนดในการแสดงตัวบ่งชี้
ข้อกำหนดสำหรับตัวบ่งชี้ไมโครโฟนและกล้องในอุปกรณ์ที่ใช้ Android 12 ขึ้นไปมีดังนี้
- โดยตัวบ่งชี้ต้องปรากฏในแถบสถานะและคงลำดับความสำคัญสูงสุดของภาพ (เช่น อยู่ที่ตำแหน่งขวาสุดในมุมขวาบน)
- โดยตัวบ่งชี้ต้องอยู่ในตำแหน่งเดียวกันอย่างสม่ำเสมอ และแอปต้องไม่บล็อกตัวบ่งชี้เมื่อเปิดตัว
- โดยตัวบ่งชี้ทั้ง 2 รายการต้องเป็นสีเขียว (หรือสีเขียวเฉดต่างๆ)
- การคลิกตัวบ่งชี้อย่างน้อย 1 รายการต้องแสดงการแจ้งเตือนความสามารถในการระบุแหล่งที่มาของแอปที่ทำสิ่งต่อไปนี้
- แสดงชื่อแอปที่ใช้ไมโครโฟนและ (หรือ) กล้อง
- แสดงชื่อแอปที่ใช้ไมโครโฟนและ (หรือ) กล้องภายใน 15 วินาทีที่ผ่านมา
- นำผู้ใช้ไปยังหน้าสิทธิ์ของแอปในการตั้งค่า
การใช้งานและฟีเจอร์
ใน Android 12 UI จะแยกความแตกต่างระหว่าง การใช้งานที่กำลังทำงานกับการใช้งานล่าสุด ระบบจะถือว่าการใช้งานทำงานอยู่หากมีการ ทำเครื่องหมายโดยระบบว่ากำลังทำงาน หรือมีอายุไม่เกิน 5 วินาที
- ไอคอนแถบสถานะจะแสดงทุกครั้งที่แอปมีการเข้าถึงไมโครโฟน หรือกล้องที่ต้องคำนึงถึงความเป็นส่วนตัวของผู้ใช้
- ผู้ใช้สามารถคลิกไอคอนเหล่านี้และดูว่าแอปใดกำลังเข้าถึงไมโครโฟน กล้อง หรือทั้ง 2 อย่าง
รูปที่ 1 สัญญาณบอกสถานะว่ามีการใช้งานไมโครโฟนและกล้องซึ่งแสดงการเข้าถึงที่ใช้งานอยู่ (มุมขวาบน)
ระบบจะถือว่าสิทธิ์เข้าถึงใช้งานอยู่ตราบใดที่ตัวบ่งชี้แสดงอยู่ ไอคอนจะแสดง ก่อน จากนั้นจะเปลี่ยนเป็นจุดที่คงอยู่จนกว่าจะปิด หรือปิดแอป
เมื่อผู้ใช้เปิดการตั้งค่าด่วนแล้วแตะตัวบ่งชี้ กล่องโต้ตอบจะปรากฏขึ้น เพื่อแสดงว่าแอปกำลังใช้กล้อง ไมโครโฟน หรือทั้ง 2 อย่าง
รูปที่ 2 ตัวบ่งชี้การเข้าถึงที่ใช้งานอยู่และล่าสุด
รูปภาพในรูปที่ 2 แสดงตัวบ่งชี้การเข้าถึงที่ใช้งานอยู่เมื่อแอปที่กําลังทํางานเข้าถึงข้อมูลในช่วง 5 วินาทีที่ผ่านมา
ตัวบ่งชี้การเข้าถึงล่าสุดแสดงว่าแอปเข้าถึงข้อมูลในช่วง 15 วินาทีก่อนหน้า แต่แอปไม่ได้ใช้งานอยู่ แอปที่ใช้งานอยู่ทั้งหมดจะแสดงใน กล่องโต้ตอบ แต่จะมีเพียงแอปเดียวที่แสดงเป็นแหล่งที่มาของการเข้าถึงล่าสุด แม้ว่าจะมีแอปมากกว่า 1 แอปที่เข้าถึงข้อมูลภายในกรอบเวลา 15 วินาทีก่อนหน้าก็ตาม มุมมองการเข้าถึง จะยังคงค้างอยู่จนกว่าผู้ใช้จะปิดกล่องโต้ตอบการแจ้งเตือน
ส่งและเปิดใช้
คลาส PermissionManager
มีเมธอดสำหรับป้อนข้อมูลในกล่องโต้ตอบ ซึ่งอยู่ใน UI ของระบบ
- UI ของระบบจะตอบสนองต่อการสลับการกำหนดค่าอุปกรณ์ ดังนี้
privacy/mic_camera_indicators_enabled
- การเปลี่ยนนี้จำเป็นเนื่องจากมีรถนำส่ง 2 คันแยกกันตามลำดับต่อไปนี้
- ส่ง
- เปิดใช้
- UI ของระบบต้องไม่ขัดข้องหากเมธอดใน
PermissionManager
ไม่สามารถ ให้ข้อมูลที่จำเป็นได้
ขั้นตอนการประมวลผล
ฟังก์ชันตัวบ่งชี้สิทธิ์มี 3 ส่วนหลัก ดังนี้
- แอป
- ตัวบ่งชี้ (จัดการโดย SystemUI)
- วิธีตรวจสอบว่าแอปใดใช้ข้อมูล
PermissionController
มีกลไกในการพิจารณาว่าแอปใดกำลังใช้ข้อมูล
SystemUI จะรอฟังแอปที่ใช้ข้อมูลส่วนตัว SystemUI จะแสดงไอคอนในแถบนำทางด้านบนซึ่งสอดคล้องกับสิทธิ์ที่ใช้ PermissionController
จะแสดงข้อมูลเกี่ยวกับการใช้งานเมื่อผู้ใช้คลิกไอคอน
รูปที่ 3 คอมโพเนนต์ของระบบและโฟลว์การเปลี่ยน (UI)
การเปลี่ยนผ่านที่มีหมายเลขในรูปที่ 3 อธิบายไว้ด้านล่าง
1- แอปขอข้อมูลส่วนตัวจากระบบ
2- ระบบจะตรวจสอบสิทธิ์ หากได้รับอนุญาต ระบบจะ แจ้งผู้ให้บริการข้อมูลและบันทึกการใช้งานใน app-ops
3- ผู้ให้บริการข้อมูลให้ข้อมูลแก่แอป
4-5 ผู้ใช้คลิกไอคอน UI ของระบบจะขอข้อมูลจาก
PermissionManager
และแสดงกล่องโต้ตอบต่อผู้ใช้
รายละเอียดกระบวนการ
- แอปใช้ไมโครโฟนและกล้องเพื่อโทร
AppOpsManager.startOp
,stopOp
และ (หรือ)noteOp
ซึ่งจะสร้างบันทึกการดำเนินการของแอปในเซิร์ฟเวอร์ระบบ - UI ของระบบจะรอรับการดำเนินการของแอปใหม่โดยใช้เครื่องมือฟัง
AppOpsManager.OnOpActiveChangedInternalListener
และOnOpNotedListener
เมื่อมีการใช้งานใหม่ (ผ่านการเรียกใช้startOp
หรือnoteOp
) UI ของระบบจะยืนยันว่าการใช้งานนั้นมาจากแอปของระบบ - หาก UI ของระบบยืนยันการใช้งานแอปของระบบ และหากการใช้งานนั้นเป็นของ ไมโครโฟน UI ของระบบจะตรวจสอบว่าไมโครโฟนปิดเสียงอยู่หรือไม่
- หาก UI ของระบบยืนยันการใช้งานแอปที่ไม่ใช่ระบบ (และสำหรับการใช้งานไมโครโฟน ว่าไมโครโฟนไม่ได้ปิดเสียงอยู่ สำหรับการใช้งานกล้องว่ากล้องเปิดอยู่) ระบบจะแสดงไอคอนที่แสดงถึงการใช้งานดังกล่าว
หาก UI ของระบบได้รับ noteOp
ที่ไม่มีระยะเวลา ระบบจะแสดงไอคอนเป็นเวลาอย่างน้อย 5 วินาที มิเช่นนั้น ไอคอนจะแสดงจนกว่าจะได้รับ stopOp
หรือเป็นเวลา 5 วินาที แล้วแต่ว่ากรณีใดจะนานกว่า ผู้ใช้ที่คลิกไอคอน
จะเริ่ม Intent ที่ไปที่ PermissionController
เพื่อเริ่มกล่องโต้ตอบ
PermissionController
จะโหลดการใช้งานไมโครโฟนและกล้องล่าสุดทั้งหมด โดยจะตรวจสอบว่ามีการเรียกใช้แอปใดอยู่หรือไม่ หรือมีการเรียกใช้ภายในกรอบเวลา
ที่กำหนดโดย UI ของระบบ หากพบรายการที่ตรงกัน ระบบจะแสดงชื่อแอป
ที่ใช้สิทธิ์และสิทธิ์ที่แอปใช้
การเปลี่ยนแปลงนี้ใน Android 12 ขึ้นไป ทำให้แอปบางแอปต้องเปลี่ยนลักษณะการทำงานหรือใช้ลักษณะการทำงานพิเศษ
Telephony ต้องใช้สิทธิ์ (เพื่อรองรับสแต็กไมโครโฟนแยกต่างหากที่ใช้ในการโทร) ขณะทำงานร่วมกับแอป Google Search สำหรับ Android (AGSA) และ Google Mobile Services (GMS)