เมื่ออยู่ในโหมดเครื่องบิน อุปกรณ์ยังคงสามารถเข้าถึงเซ็นเซอร์บางตัวเพื่อเปิดใช้งานฟังก์ชันเฉพาะ เช่น การหมุนหน้าจอและการถ่ายภาพ Android 10 ให้การตั้งค่าตัวเลือกสำหรับนักพัฒนาในการปิดเซ็นเซอร์ทั้งหมดในอุปกรณ์ ฟีเจอร์นี้ช่วยให้นักพัฒนาทดสอบฟังก์ชันการทำงานของแอปในสถานการณ์ที่เซ็นเซอร์เหล่านั้นใช้งานไม่ได้ และยังช่วยให้ผู้ใช้ควบคุมเซ็นเซอร์ในอุปกรณ์ได้อีกด้วย
เมื่อนักพัฒนาหรือผู้ใช้เปิดใช้งาน เซ็นเซอร์ ในตัวเลือกของนักพัฒนา ( การตั้งค่า > ระบบ > ตัวเลือกนักพัฒนา > ไทล์การตั้งค่าด่วนสำหรับนักพัฒนา ) ไทล์ใหม่จะปรากฏในถาดการตั้งค่าด่วน พวกเขาสามารถใช้ไทล์เพื่อป้องกันไม่ให้แอปเข้าถึงกล้อง ไมโครโฟน และเซ็นเซอร์ทั้งหมดที่จัดการโดยคลาส SensorManager
คำเตือน: ตัวเลือกนี้มีผลกับแอปที่เข้าถึงเซ็นเซอร์ผ่าน `SensorService`, `CameraService` และ `AudioPolicyService` เท่านั้น ฟังก์ชันระบบโทรศัพท์ไม่ได้ใช้ `AudioPolicyService` และยังคงสามารถเข้าถึงไมโครโฟนระหว่างการโทรได้
การนำไปปฏิบัติ
Android 10 มีการใช้งานอ้างอิงที่จัดการกล้อง ไมโครโฟน และ SensorManager
บริการระบบที่จัดการ เซ็นเซอร์ปิด สถานะและแจ้งให้ลูกค้าทราบถึงการเปลี่ยนแปลงสถานะอยู่ใน frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java
ผู้จัดการที่อำนวยความสะดวกในการเข้าถึง SensorPrivacyService
ภายในบริบทของแอปพลิเคชันจะอยู่ใน frameworks/base/core/java/android/hardware/SensorPrivacyManager.java
หากอุปกรณ์ของคุณใช้การใช้งานเริ่มต้นของ SensorService
, CameraService
และ AudioPolicyService
ก็ไม่จำเป็นต้องปรับแต่งเพิ่มเติมในการออกแบบอ้างอิง หากคุณมีเซ็นเซอร์อื่น โปรดดู การปรับแต่ง เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับการรองรับคุณสมบัตินี้
ปัญหาทั่วไป
เมื่อใช้ฟีเจอร์นี้ บางครั้งแอปกล้องไม่ตอบสนองอย่างถูกต้องต่อการเรียกกลับ onError
ทั้งเมื่อพยายามรับกล้องครั้งแรกและเมื่อกล้องไม่พร้อมใช้งานอีกต่อไป โดยทั่วไปแล้วจะส่งผลให้แอปหยุดทำงานเมื่อเปิดใช้งานไทล์นี้ แต่สิ่งนี้สามารถใช้เป็นสัญญาณเพื่อบ่งชี้ว่าฟีเจอร์นั้นทำงานตามที่คาดไว้
ลักษณะการทำงานนี้บ่งชี้ว่าแอปจัดการการโทรกลับ onError
ใน CameraDevice.StateCallback
ไม่ถูกต้อง เมื่อเปิดใช้งาน เซ็นเซอร์ปิด อยู่ ระบบจะเรียกใช้การโทรกลับ onError
โดยตั้งค่า CameraDevice.StateCallback.ERROR_CAMERA_DISABLED
เป็นค่าความผิดพลาด อัปเดตแอปของบุคคลที่หนึ่งเพื่อจัดการกับการโทรกลับ onError
ด้วยค่านี้ โดยไม่ทำการเรียก CameraDevice
ในภายหลังจนกว่าการเรียก openCamera
ครั้งต่อไปจะสำเร็จ
พฤติกรรมของเซ็นเซอร์
เมื่อเปิดใช้งาน เซนเซอร์ปิด เซนเซอร์จะหยุดการรายงานข้อมูลใดๆ ไปยังระบบหรือแอป แอปยังคงสามารถขอเซ็นเซอร์และลงทะเบียนผู้ฟังได้เมื่อเปิดใช้งาน เซ็นเซอร์ปิด อยู่ แต่ความเงียบจะถูกส่งกลับสำหรับไมโครโฟนหรือการโทรกลับ onSensorChanged
จะไม่ถูกเรียกใช้สำหรับเซ็นเซอร์ ทันทีที่ปิดใช้งานไทล์ ผู้ฟังเดิมเหล่านั้นจะเริ่มได้รับเอาต์พุตจริงจากไมโครโฟนหรือการโทรกลับที่คาดหวังไปยัง onSensorChanged
โดยไม่จำเป็นต้องทำงานเพิ่มเติมใดๆ ลักษณะการทำงานเริ่มต้นของเซ็นเซอร์ปิดเสียงมีดังนี้
กล้อง
หากแอปใช้กล้องเมื่อเปิดใช้ งานเซ็นเซอร์ปิด อยู่ ข้อผิดพลาดจะถูกส่งไปยังวิธีโทรกลับ onError
และ CameraDevice
จะถูกปิด
หากแอปพยายามเข้าถึงกล้องเมื่อเปิดใช้งาน เซ็นเซอร์ปิด อยู่ จะมีการส่งข้อผิดพลาดไปยังวิธีการโทรกลับ onError
ไมโครโฟน
เมื่อเปิดใช้งาน เซนเซอร์ปิดอยู่ คุณจะยังคงสามารถเข้าถึงไมโครโฟนได้ แต่จะมีเพียงความเงียบเท่านั้นที่ถูกส่งกลับ หากแอปใช้ไมโครโฟนเมื่อเปิดใช้ งานเซนเซอร์ปิด อยู่ จะไม่เกิดข้อผิดพลาด แต่การบันทึกจะถูกปิดเสียงและส่งกลับอาร์เรย์ของศูนย์ หาก ปิดเซ็นเซอร์ ในขณะที่แอปยังคงใช้ไมโครโฟน ข้อมูลเสียงที่คาดหวังจะถูกส่งกลับ
หากแอปพยายามเข้าถึงไมโครโฟนเมื่อเปิดใช้งาน เซ็นเซอร์ปิด อยู่ ไมโครโฟนจะกลับเงียบลง
เซนเซอร์
เมื่อแอปพยายามเข้าถึงเซ็นเซอร์อื่นๆ เมื่อเปิดใช้งาน เซ็นเซอร์ปิด อยู่ ประเภทของเซ็นเซอร์จะส่งผลต่อการทำงานเริ่มต้น:
- เซ็นเซอร์ต่อเนื่อง: เซ็นเซอร์ในโหมดการรายงานนี้จะหยุดส่งเหตุการณ์ หากแอปโต้ตอบกับเซ็นเซอร์ต่อเนื่องเมื่อเปิดใช้งาน เซ็นเซอร์ปิด อยู่ เซ็นเซอร์จะไม่ส่งข้อมูลเพิ่มเติมไปยังแอปจนกว่าคุณสมบัติจะถูกปิดใช้งาน
- เหตุการณ์การฟลัช: สามารถขอการฟลัชเซ็นเซอร์ได้เมื่อเปิดใช้งานไทล์และการเรียกกลับ
onFlushComplete
จะถูกเรียกใช้เพื่อระบุว่าการฟลัชที่ร้องขอเสร็จสมบูรณ์ แต่ไม่มีการสร้างเหตุการณ์ใหม่ที่มีข้อมูลเซ็นเซอร์และส่งคืนไปยังการเรียกกลับonSensorChanged
- เหตุการณ์การเปลี่ยนแปลง: เมื่อเปิดใช้ งานเซนเซอร์ปิด อยู่ จะไม่มีการรายงานเหตุการณ์การเปลี่ยนแปลงใหม่
- เหตุการณ์ทริกเกอร์: เมื่อเปิดใช้ งานเซ็นเซอร์ ปิด เหตุการณ์ทริกเกอร์จะหยุดสร้าง กิจกรรมที่มีอยู่เสร็จสมบูรณ์แล้ว
การปรับแต่ง
หากอุปกรณ์ของคุณใช้การใช้งานเริ่มต้นของ SensorService
, CameraService
และ AudioPolicyService
ก็ไม่จำเป็นต้องปรับแต่งเพิ่มเติมในการออกแบบอ้างอิง อย่างไรก็ตาม คุณสามารถรองรับเซ็นเซอร์ที่จัดการภายนอก SensorManager
ลบ เซ็นเซอร์ออก จากอุปกรณ์ของคุณ หรือเปลี่ยน UI ของระบบสำหรับไทล์การตั้งค่าด่วนของนักพัฒนา หรือไอคอนสำหรับไทล์ เซ็นเซอร์ปิด
รองรับเซ็นเซอร์มากขึ้น
หากอุปกรณ์ของคุณมีเซ็นเซอร์ที่ได้รับการจัดการภายนอก SensorManager
คุณควรเพิ่มการรองรับโดยใช้ SensorPrivacyService
และ SensorPrivacyManager
เมื่อสลับไทล์ ปิดเซ็นเซอร์ SensorPrivacyService
จะเรียกใช้การโทรกลับทางเดียวสำหรับผู้ฟังที่ลงทะเบียนทั้งหมด เมื่อได้รับการติดต่อกลับนี้ Listener ที่ลงทะเบียนไว้สามารถดำเนินการตามขั้นตอนที่จำเป็นตามสถานะของไทล์ได้ หากเปิดใช้งาน การเชื่อมต่อที่มีอยู่ทั้งหมดสามารถยุติและส่งคืนข้อมูลว่าง และตั้งค่าสถานะเพื่อป้องกันการเชื่อมต่อใหม่ หากปิดใช้งานอยู่ คุณสามารถรีเซ็ตแฟล็กเพื่ออนุญาตการเชื่อมต่อใหม่ได้ การใช้บริการกล้อง ( platform/frameworks/av/services/camera/libcameraservice/
) เป็นตัวอย่าง ให้ทำตามขั้นตอนเหล่านี้เพื่อเพิ่มการรองรับเซ็นเซอร์ใหม่
- ใช้อินเทอร์เฟซ
BnSensorPrivacyListener
สำหรับรายละเอียดเพิ่มเติม โปรดดูSensorPrivacyPolicy
ในCameraService.h
- ลงทะเบียนกับ
SensorPrivacyManager
และรับสถานะของไทล์เมื่อเริ่มต้นระบบ สำหรับรายละเอียดเพิ่มเติม โปรดดูSensorPrivacyPolicy::registerSelf
ในCameraService.cpp
- จัดการ เซ็นเซอร์ปิด การเปลี่ยนแปลงสถานะในการโทรกลับ สำหรับรายละเอียดเพิ่มเติม โปรดดู
SensorPrivacyPolicy::onSensorPrivacyChanged
และCameraService::blockAllClients
ในCameraService.cpp
- ป้องกันการเข้าถึงข้อมูลเซ็นเซอร์เมื่อเปิดใช้งานไทล์ สำหรับรายละเอียดเพิ่มเติม โปรดดูการตรวจสอบนโยบายความเป็นส่วนตัวของเซ็นเซอร์ใน
CameraService::validateClientPermissionsLocked
ในCameraService.cpp
ปิดเซ็นเซอร์ถอด
ในฐานะเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์สำหรับการทดสอบ เซ็นเซอร์ที่ปิด อยู่จะถูกซ่อนไว้เนื่องจากผู้ใช้ต้องเปิดใช้งานโหมดนักพัฒนาซอฟต์แวร์ก่อน จากนั้นเลือกที่จะทำให้ไทล์พร้อมใช้งานในการตั้งค่า
หากคุณไม่ต้องการรองรับ Sensors off บนอุปกรณ์ของคุณ ให้ลบแท็กบริการออกจาก packages/apps/Settings/AndroidManifest.xml
หากคุณลบแท็กบริการออก ไทล์ เซ็นเซอร์ปิด จะไม่สามารถเปิดใช้งานได้จากหน้าไทล์การตั้งค่าด่วนของนักพัฒนา
เปลี่ยนเซ็นเซอร์ปิด UI
มีสององค์ประกอบที่สามารถปรับแต่งได้สำหรับ Sensors off UI: ไอคอนที่แสดงสำหรับไทล์การตั้งค่าด่วนของนักพัฒนา และไอคอนที่แสดงในแถบสถานะเมื่อเปิดใช้งานไทล์ หากต้องการปรับแต่งรูปลักษณ์ของไอคอนเหล่านี้ ให้แทนที่ไฟล์เหล่านี้:
- ไอคอนไทล์การตั้งค่าด่วน:
packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
- ไอคอนแถบสถานะ:
frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml
การตรวจสอบ
เนื่องจากเป็นเครื่องมือเสริมสำหรับนักพัฒนาซอฟต์แวร์ จึงไม่มีการทดสอบ CTS สำหรับฟีเจอร์นี้
คุณสามารถทดสอบด้วยตนเองโดยติดตั้งแอปจาก Google Play ที่อ่านและแสดงเซ็นเซอร์ทั้งหมดของอุปกรณ์ เมื่อคุณเปิดใช้งานไทล์ ปิดเซ็นเซอร์ ตรวจสอบให้แน่ใจว่าไม่มีการเปลี่ยนแปลงค่าใดๆ สำหรับเซ็นเซอร์ เสียงไมโครโฟนจะเงียบ และไม่สามารถเข้าถึงกล้องได้