ปิดเซ็นเซอร์

เมื่ออยู่ในโหมดเครื่องบิน อุปกรณ์ยังคงสามารถเข้าถึงเซ็นเซอร์บางตัวเพื่อเปิดใช้งานฟังก์ชันเฉพาะ เช่น การหมุนหน้าจอและการถ่ายภาพ 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/ ) เป็นตัวอย่าง ให้ทำตามขั้นตอนเหล่านี้เพื่อเพิ่มการรองรับเซ็นเซอร์ใหม่

  1. ใช้อินเทอร์เฟซ BnSensorPrivacyListener สำหรับรายละเอียดเพิ่มเติม โปรดดู SensorPrivacyPolicy ใน CameraService.h
  2. ลงทะเบียนกับ SensorPrivacyManager และรับสถานะของไทล์เมื่อเริ่มต้นระบบ สำหรับรายละเอียดเพิ่มเติม โปรดดู SensorPrivacyPolicy::registerSelf ใน CameraService.cpp
  3. จัดการ เซ็นเซอร์ปิด การเปลี่ยนแปลงสถานะในการโทรกลับ สำหรับรายละเอียดเพิ่มเติม โปรดดู SensorPrivacyPolicy::onSensorPrivacyChanged และ CameraService::blockAllClients ใน CameraService.cpp
  4. ป้องกันการเข้าถึงข้อมูลเซ็นเซอร์เมื่อเปิดใช้งานไทล์ สำหรับรายละเอียดเพิ่มเติม โปรดดูการตรวจสอบนโยบายความเป็นส่วนตัวของเซ็นเซอร์ใน 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 ที่อ่านและแสดงเซ็นเซอร์ทั้งหมดของอุปกรณ์ เมื่อคุณเปิดใช้งานไทล์ ปิดเซ็นเซอร์ ตรวจสอบให้แน่ใจว่าไม่มีการเปลี่ยนแปลงค่าใดๆ สำหรับเซ็นเซอร์ เสียงไมโครโฟนจะเงียบ และไม่สามารถเข้าถึงกล้องได้