센서 사용 안함

기기는 비행기 모드에서도 계속해서 일부 센서에 액세스하여 화면 회전 및 사진 촬영 등의 특정 기능을 지원할 수 있습니다. Android 10은 기기의 모든 센서를 종료할 수 있도록 개발자 옵션 설정을 제공합니다. 이 기능은 개발자가 센서를 사용할 수 없는 상황에서 앱 기능을 테스트하고 사용자가 기기의 센서를 제어할 수 있도록 방법을 제공합니다.

개발자나 사용자가 개발자 옵션에서 센서 사용 안 함(설정 > 시스템 > 개발자 옵션 > 빠른 설정 개발자 타일)을 사용 설정하면 빠른 설정 트레이에 새 타일이 표시됩니다. 개발자나 사용자는 타일을 사용하여 앱이 카메라, 마이크, 그리고 SensorManager 클래스로 관리되는 모든 센서를 액세스하지 못하게 합니다.

구현

Android 10에는 카메라, 마이크와 SensorManager 센서를 처리하는 참조 구현이 도입되었습니다. 센서 사용 안 함 상태를 관리하고 클라이언트에 상태 변화를 알리는 시스템 서비스는 frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java에 위치합니다. 애플리케이션의 컨텍스트 내에서 SensorPrivacyService에 대한 액세스를 용이하게 하는 관리자는 frameworks/base/core/java/android/hardware/SensorPrivacyManager.java에 위치합니다.

기기가 SensorService, CameraServiceAudioPolicyService의 기본 구현을 사용하는 경우에는 참조 설계를 추가로 맞춤설정할 필요가 없습니다. 다른 센서가 있는 경우 맞춤설정에서 기능 지원에 대한 추가 정보를 확인하세요.

일반적인 문제

이 기능을 구현할 때는 간혹 카메라 앱이 onError 콜백에 제대로 응답하지 않는 경우가 있습니다(처음으로 카메라를 가져오려고 시도하는 경우 및 카메라를 더 이상 사용할 수 없는 경우). 이는 보통 타일이 사용 설정된 경우 앱 충돌의 결과로 이어지지만 기능이 예상대로 동작하고 있다는 의미로 이해할 수도 있습니다.

이러한 동작은 앱이 onError 콜백을 CameraDevice.StateCallback에서 제대로 처리하지 않고 있음을 나타냅니다. 센서 사용 안 함이 사용 설정되면 onError 콜백이 CameraDevice.StateCallback.ERROR_CAMERA_DISABLED(오류 값으로 설정됨)로 호출됩니다. 후속 openCamera 호출이 성공할 때까지 CameraDevice에 대한 어떠한 후속 호출도 시도하지 않으면 모든 자사 앱이 이 값으로 onError 콜백을 처리하도록 업데이트됩니다.

센서 동작

센서 사용 안 함이 사용 설정되면 센서가 더 이상 데이터를 시스템이나 앱에 보고하지 않습니다. 앱은 센서 사용 안 함이 사용 설정되었을 때에도 계속해서 센서를 요청하고 리스너를 등록할 수 있지만 mic에 대해 무음이 반환되거나 센서에 대해 onSensorChanged 콜백이 호출되지 않습니다. 타일이 사용 중지되는 즉시 이러한 리스너는 mic나 onSensorChanged에 대한 예상 호출의 실제 출력을 수신하기 시작하며, 이때 추가 작업을 수행할 필요도 없습니다. 무음 처리된 센서의 기본 동작은 다음과 같습니다.

카메라

센서 사용 안 함이 사용 설정된 상태에서 앱이 카메라를 사용하면 오류가 onError 콜백 메서드로 전송되고 CameraDevice가 닫힙니다.

센서 사용 안 함이 사용 설정된 상태에서 앱에 카메라에 액세스하려고 시도하면 오류가 onError 콜백 메서드로 전송됩니다.

마이크

센서 사용 안 함이 사용 설정되면 마이크에는 계속해서 액세스할 수 있지만 무음만 반환됩니다. 센서 사용 안 함이 사용 설정된 상태에서 앱이 마이크를 사용하면 오류는 생성되지 않지만 녹음이 무음 처리되고 0 배열만 반환됩니다. 앱이 계속해서 마이크를 사용하는 동안 센서 사용 안 함이 사용 중지되면 예상된 오디오 데이터가 반환됩니다.

센서 사용 안 함이 사용 설정된 상태에서 앱이 마이크에 액세스하려고 시도하면 마이크가 무음을 반환합니다.

센서

센서 사용 안 함이 사용 설정된 상태에서 앱이 다른 센서에 액세스하려고 시도하면 센서 유형이 기본 동작에 영향을 미칩니다.

  • 연속 센서: 이 보고 모드의 센서는 이벤트 전송을 멈춥니다. 센서 사용 안 함이 사용 설정된 상태에서 앱이 연속 센서와 상호작용 중인 경우에는 기능이 사용 중지될 때까지 센서가 추가 데이터를 앱으로 전송하지 않습니다.
  • 플러시 이벤트: 타일이 사용 설정되고 onFlushComplete 콜백이 호출되었을 때 센서 플러시를 요청하면 요청된 플러시가 정상적으로 완료되었음을 나타낼 수 있지만 더 이상 센서 데이터를 포함하는 새로운 이벤트가 생성되어 onSensorChanged 콜백으로 반환되지 않습니다.
  • 온체인지 이벤트: 센서 사용 안 함이 사용 설정되면 새로운 변경 이벤트가 보고되지 않습니다.
  • 트리거 이벤트: 센서 사용 안 함이 사용 설정되면 더 이상 트리거 이벤트가 생성되지 않습니다. 모든 기존 이벤트는 완료됩니다.

맞춤설정

기기가 SensorService, CameraServiceAudioPolicyService의 기본 구현을 사용하는 경우에는 참조 설계를 추가로 맞춤설정할 필요가 없습니다. 하지만 SensorManager 외부에서 관리되는 센서를 지원하거나 기기에서 센서 사용 안 함을 제거하거나 개발자 빠른 설정 타일의 시스템 UI 또는 센서 사용 안 함 타일의 아이콘을 변경할 수 있습니다.

추가 센서 지원

기기에 SensorManager 외부에서 관리되는 센서가 포함된 경우 SensorPrivacyServiceSensorPrivacyManager를 사용하여 이에 대한 지원을 추가해야 합니다.

센서 사용 안 함 타일이 전환된 경우 SensorPrivacyService는 등록된 모든 리스너에 대해 일방적인 콜백을 호출합니다. 이 콜백이 수신되면 등록된 리스너가 타일 상태에 따라 필요한 단계를 수행할 수 있습니다. 사용 설정된 경우에는 모든 기존 연결이 종료되고 빈 데이터가 반환되며 플래그가 새 연결을 방지하도록 설정됩니다. 사용 설정된 경우에는 새 연결을 허용하도록 플래그를 재설정할 수 있습니다. 카메라 서비스(platform/frameworks/av/services/camera/libcameraservice/)를 예로 활용하여, 다음 단계에 따라 새 센서에 대한 지원을 추가해 보세요.

  1. BnSensorPrivacyListener 인터페이스를 구현합니다. 자세한 내용은 CameraService.hSensorPrivacyPolicy를 참조하세요.
  2. SensorPrivacyManager에 등록하고 시작 시 타일의 상태를 가져옵니다. 자세한 내용은 CameraService.cppSensorPrivacyPolicy::registerSelf를 참조하세요.
  3. 콜백의 센서 사용 안 함 상태 변경을 처리합니다. 자세한 내용은 CameraService.cppSensorPrivacyPolicy::onSensorPrivacyChangedCameraService::blockAllClients를 참조하세요.
  4. 타일이 사용 설정되면 센서 데이터에 대한 액세스를 차단합니다. 자세한 내용은 CameraService.cppCameraService::validateClientPermissionsLocked에서 센서 개인정보 보호 정책 검사를 확인하세요.

센서 사용 안 함 제거

테스트용 개발자 도구로 사용할 때는 센서 사용 안 함이 숨겨집니다. 이는 사용자가 먼저 개발자 모드를 사용 설정한 다음 설정에서 타일을 선택적으로 제공해야 하기 때문입니다.

기기에서 센서 사용 안 함을 지원하고 싶지 않은 경우 packages/apps/Settings/AndroidManifest.xml에서 서비스 태그를 제거하세요. 서비스 태그를 제거하면 개발자 빠른 설정 타일 페이지에서 센서 사용 안 함 타일을 사용할 수 없습니다.

센서 사용 안 함 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에서 설치하여 수동 테스트를 수행할 수 있습니다. 센서 사용 안 함 타일을 사용 설정할 때는 센서 값이 하나도 변경되지 않았는지, 마이크 오디오가 무음인지, 카메라에 액세스할 수 없는지 확인하세요.