Sensores apagados

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 de un dispositivo. Esta característica ayuda a los desarrolladores a probar la funcionalidad de su aplicación en situaciones en las que esos sensores dejan de estar disponibles y también brinda a los usuarios una forma de controlar los sensores en su dispositivo.

Cuando un desarrollador o usuario desactiva los sensores en las opciones de desarrollador ( Configuración > Sistema > Opciones de desarrollador > Mosaicos de desarrollador de configuración rápida ), aparece un nuevo mosaico 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 aún 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 de los sensores apagados y notifica a los clientes sobre 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 utilizan la implementación predeterminada de SensorService , CameraService y AudioPolicyService , no se necesita ninguna personalización adicional en el diseño de referencia. Si tiene otros sensores, consulte Personalización para obtener más detalles sobre cómo admitir 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 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 provoca que la aplicación falle cuando este mosaico está habilitado, pero esto puede usarse como una señal para indicar que la característica se está comportando como se esperaba.

Este comportamiento indica que la aplicación no maneja correctamente la devolución de llamada onError en CameraDevice.StateCallback . Cuando Sensores apagados 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 ninguna llamada posterior a CameraDevice hasta que una llamada posterior openCamera sea exitosa.

Comportamiento del sensor

Cuando Sensores apagados está habilitado, los sensores dejan de informar datos al sistema o a las aplicaciones. Una aplicación aún puede solicitar un sensor y registrar un oyente cuando Sensores apagados está habilitado, pero se devuelve el silencio para el micrófono o la devolución de llamada onSensorChanged nunca se invoca para los sensores. Tan pronto como se desactiva 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 Sensores apagados 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 Sensores apagados está habilitado, se envía un error al método de devolución de llamada onError .

Micrófono

Cuando Sensores apagados 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 Sensores apagados está habilitado, no se genera ningún error, pero la grabación se silencia y solo devuelve una serie de ceros. Si Sensores apagados está desactivado mientras la aplicación todavía está usando el micrófono, se devuelven los datos de audio esperados.

Si una aplicación intenta acceder al micrófono cuando Sensores apagados está habilitado, el micrófono devuelve el silencio.

Sensor

Cuando una aplicación intenta acceder a otros sensores cuando Sensores apagados 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 interactúa con un sensor continuo cuando Sensores desactivados está habilitado, el sensor no envía datos adicionales a la aplicación hasta que la función esté desactivada.
  • 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ó con éxito, 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.
  • Eventos de activación: cuando Sensores apagados está habilitado, los eventos de activación dejan de generarse. Cualquier evento existente completo.

Personalización

Si sus dispositivos utilizan la implementación predeterminada de SensorService , CameraService y AudioPolicyService , no se necesita ninguna personalización adicional en 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 del mosaico Sensores desactivados .

Admite más sensores

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

Cuando se alterna el mosaico Sensores desactivados , SensorPrivacyService invoca una devolución de llamada unidireccional para todos los oyentes registrados. Cuando se recibe esta devolución de llamada, el oyente 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. Usando 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 en 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 apagados 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 política de privacidad del sensor en CameraService::validateClientPermissionsLocked en CameraService.cpp .

Quitar sensores apagados

Como herramienta de desarrollador para 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 la desactivación de sensores 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.

Cambie los sensores de la interfaz de usuario

Hay dos elementos que se pueden personalizar para la interfaz de usuario 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 la apariencia de estos íconos, 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 desarrollador opcional, no existen pruebas CTS para esta función.

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