Sensores desactivados

Cuando están en modo avión, los dispositivos aún pueden acceder a algunos sensores para habilitar funciones específicas, como la rotación de la pantalla y la toma de fotografías. Android 10 proporciona una configuración de opciones de desarrollador para apagar todos los sensores en un dispositivo. Esta característica ayuda a los desarrolladores a probar la funcionalidad de su aplicación en situaciones en las que esos sensores no están disponibles y también brinda a los usuarios una forma de controlar los sensores en su dispositivo.

Cuando un desarrollador o usuario habilita Sensores desactivados en las opciones de desarrollador ( Configuración > Sistema > Opciones de desarrollador > Mosaicos de desarrollador de configuración rápida ), aparece un mosaico nuevo en la bandeja de configuración rápida. Pueden usar el mosaico para evitar que las aplicaciones accedan a la cámara, el micrófono y todos los sensores administrados por la clase SensorManager .

Advertencia: esta opción solo afecta a las aplicaciones que acceden a los sensores a través de `SensorService`, `CameraService` y `AudioPolicyService`. Las funciones de telefonía no utilizan `AudioPolicyService` y todavía tienen acceso al micrófono durante las llamadas telefónicas.

Implementación

Android 10 incluye una implementación de referencia que maneja la cámara, el micrófono y los sensores SensorManager . El servicio del sistema que administra el estado desactivado de los sensores y notifica a los clientes los cambios de estado se encuentra en frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java . El administrador que facilita el acceso a SensorPrivacyService dentro del contexto de una aplicación se encuentra en frameworks/base/core/java/android/hardware/SensorPrivacyManager.java .

Si sus dispositivos usan la implementación predeterminada de SensorService , CameraService y AudioPolicyService , entonces no se necesita ninguna personalización adicional para el diseño de referencia. Si tiene otros sensores, consulte Personalización para obtener más detalles sobre la compatibilidad con esta función.

Problemas comunes

Al implementar esta función, a veces las aplicaciones de la cámara no responden correctamente a las devoluciones de llamada de onError , tanto cuando se intenta adquirir la cámara por primera vez como cuando la cámara ya no está disponible. Por lo general, esto hace que la aplicación se bloquee cuando este mosaico está habilitado, pero esto se puede usar como una señal para indicar que la función se está comportando como se esperaba.

Este comportamiento indica que la aplicación no está manejando correctamente la devolución de llamada onError en CameraDevice.StateCallback . Cuando Sensors off está habilitado, la devolución de llamada onError se invoca con CameraDevice.StateCallback.ERROR_CAMERA_DISABLED establecido como valor de error. Actualice cualquier aplicación propia para manejar la devolución de llamada onError con este valor al no realizar llamadas posteriores contra CameraDevice hasta que una llamada posterior de openCamera sea ​​exitosa.

Comportamiento de los sensores

Cuando Sensores apagados está habilitado, los sensores dejan de enviar datos al sistema o a las aplicaciones. Una aplicación aún puede solicitar un sensor y registrar a un oyente cuando Sensors off está habilitado, pero se devuelve el silencio para el micrófono o nunca se invoca la devolución de llamada onSensorChanged para los sensores. Tan pronto como se deshabilita el mosaico, esos mismos oyentes comienzan a recibir la salida real del micrófono o las devoluciones de llamada esperadas a onSensorChanged sin necesidad de realizar ningún trabajo adicional. El comportamiento predeterminado de los sensores silenciados es el siguiente.

Cámara

Si una aplicación está usando la cámara cuando Sensors off está habilitado, se envía un error al método de devolución de llamada onError y CameraDevice se cierra.

Si una aplicación intenta acceder a la cámara cuando Sensors off está habilitado, se envía un error al método de devolución de llamada onError .

Micrófono

Cuando Sensors off está habilitado, el acceso al micrófono aún es posible, pero solo se devuelve el silencio. Si una aplicación está usando el micrófono cuando los sensores están habilitados, no se genera ningún error, pero la grabación se silencia y solo devuelve una serie de ceros. Si Sensores desactivados está deshabilitado mientras la aplicación aún usa el micrófono, se devuelven los datos de audio esperados.

Si una aplicación intenta acceder al micrófono cuando los sensores están habilitados, el micrófono devuelve el silencio.

Sensor

Cuando una aplicación intenta acceder a otros sensores cuando Sensores desactivados está habilitado, el tipo de sensor influye en el comportamiento predeterminado:

  • Sensores continuos: los sensores en este modo de informe dejan de enviar eventos. Si una aplicación está interactuando con un sensor continuo cuando Sensores desactivados está habilitado, el sensor no envía datos adicionales a la aplicación hasta que se deshabilita la función.
  • Eventos de descarga: se puede solicitar una descarga del sensor cuando el mosaico está habilitado y se invoca la devolución de llamada onFlushComplete para indicar que la descarga solicitada se completó correctamente, pero no se generan nuevos eventos con datos del sensor ni se devuelven a la devolución de llamada onSensorChanged .
  • Eventos de cambio: cuando Sensores apagados está habilitado, no se informan nuevos eventos de cambio.
  • Activar eventos: cuando Sensores desactivados está habilitado, los eventos de activación dejan de generarse. Todos los eventos existentes completos.

personalización

Si sus dispositivos usan la implementación predeterminada de SensorService , CameraService y AudioPolicyService , entonces no se necesita ninguna personalización adicional para el diseño de referencia. Sin embargo, puede admitir sensores administrados fuera de SensorManager , eliminar Sensores desactivados de sus dispositivos o cambiar la interfaz de usuario del sistema para los mosaicos de configuración rápida del desarrollador o el ícono para el mosaico Sensores desactivados .

Compatible con más sensores

Si sus dispositivos contienen sensores administrados fuera de SensorManager , debe agregar soporte para ellos mediante SensorPrivacyService y SensorPrivacyManager .

Cuando el mosaico Sensores desactivados está activado, SensorPrivacyService invoca una devolución de llamada unidireccional para todos los oyentes registrados. Cuando se recibe esta devolución de llamada, el agente de escucha registrado puede tomar las medidas necesarias según el estado del mosaico. Si está habilitado, todas las conexiones existentes se pueden terminar y devolver datos vacíos, y un indicador establecido para evitar nuevas conexiones. Si está deshabilitado, la bandera se puede restablecer para permitir nuevas conexiones. Utilizando el servicio de cámara ( platform/frameworks/av/services/camera/libcameraservice/ ) como ejemplo, siga estos pasos para agregar soporte para un nuevo sensor.

  1. Implemente la interfaz BnSensorPrivacyListener . Para obtener más detalles, consulte SensorPrivacyPolicy en CameraService.h .
  2. Regístrese con SensorPrivacyManager y obtenga el estado del mosaico al inicio. Para obtener más detalles, consulte SensorPrivacyPolicy::registerSelf en CameraService.cpp .
  3. Manejar los cambios de estado de los sensores en la devolución de llamada. Para obtener más detalles, consulte SensorPrivacyPolicy::onSensorPrivacyChanged y CameraService::blockAllClients en CameraService.cpp .
  4. Evite el acceso a los datos del sensor cuando el mosaico esté habilitado. Para obtener más detalles, consulte la verificación de la política de privacidad del sensor en CameraService::validateClientPermissionsLocked en CameraService.cpp .

Eliminación de sensores desactivados

Como herramienta de desarrollador para realizar pruebas, Sensores desactivados está oculto porque un usuario primero debe habilitar el modo de desarrollador y luego elegir que el mosaico esté disponible en la configuración.

Si no desea admitir sensores desactivados en sus dispositivos, elimine la etiqueta de servicio de packages/apps/Settings/AndroidManifest.xml . Si elimina la etiqueta de servicio, el mosaico Sensores desactivados no estará disponible para habilitarse desde la página de mosaicos de configuración rápida del desarrollador.

Cambiar los sensores de la interfaz de usuario

Hay dos elementos que se pueden personalizar para la IU de sensores desactivados : el ícono que se muestra para el mosaico de configuración rápida del desarrollador y el ícono que se muestra en la barra de estado cuando el mosaico está habilitado. Para personalizar el aspecto de estos iconos, reemplace estos archivos:

  • Icono de mosaico de configuración rápida: packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
  • Icono de la barra de estado: frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml

Validación

Como herramienta de desarrollo opcional, no hay pruebas de CTS para esta característica.

Puede probar manualmente instalando una aplicación de Google Play que lee y muestra todos los sensores del dispositivo. Cuando habilite el mosaico Sensores desactivados , asegúrese de que ninguno de los valores de los sensores cambie, el audio del micrófono esté en silencio y no se pueda acceder a la cámara.