Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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 en un dispositivo. Esta función 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 les 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 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 usan `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 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 utilizan la implementación predeterminada de SensorService , CameraService y AudioPolicyService , no se necesita 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 onError 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 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 onError de devolución de llamada en CameraDevice.StateCallback . Cuando los sensores desactivados están habilitados, la onError llamada onError se invoca con CameraDevice.StateCallback.ERROR_CAMERA_DISABLED establecido como valor de error. Actualice cualquier aplicación de origen para manejar la onError llamada onError con este valor al no realizar ninguna llamada posterior contra CameraDevice hasta que una llamada posterior a openCamera sea ​​exitosa.

Comportamiento del sensor

Cuando Sensores desactivados está habilitado, los sensores dejan de informar datos al sistema o las aplicaciones. Una aplicación aún puede solicitar un sensor y registrar un oyente cuando Sensores desactivados está habilitado, pero se devuelve silencio para el micrófono o la onSensorChanged llamada onSensorChanged nunca se invoca 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 hacer ningún trabajo adicional. El comportamiento predeterminado de los sensores silenciados es el siguiente.

Cámara

Si una aplicación está utilizando la cámara cuando los sensores fuera está habilitado, un error se envía al onError método de devolución de llamada y CameraDevice está cerrado.

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

Micrófono

Cuando Sensores desactivados 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 desactivados está habilitado, no se genera ningún error, pero la grabación se silencia y solo devuelve una matriz de ceros. Si Sensores desactivados 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 desactivados está habilitado, 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 de 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 y se devuelven a la onSensorChanged llamada onSensorChanged .
  • Eventos de cambio: cuando Sensores desactivados está habilitado, no se informan eventos de cambio nuevos.
  • Eventos de activación: cuando los sensores desactivados están habilitados, los eventos de activación dejan de generarse. Todos los eventos existentes se completan.

Personalización

Si sus dispositivos utilizan la implementación predeterminada de SensorService , CameraService y AudioPolicyService , no se necesita 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 icono para el mosaico Sensores desactivados .

Apoyando más sensores

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

Cuando se SensorPrivacyService 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 realizar los pasos necesarios según el estado del mosaico. Si está habilitado, todas las conexiones existentes se pueden terminar y devolver datos vacíos, y se puede establecer un indicador para evitar nuevas conexiones. Si está deshabilitado, el indicador 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 con SensorPrivacyManager y obtenga el estado del mosaico al inicio. Para obtener más detalles, consulte SensorPrivacyPolicy::registerSelf en CameraService.cpp .
  3. Manejar Sensores desactivados cambios de estado 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 .

Quitar sensores desactivados

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

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

Cambio de la interfaz de usuario de los sensores

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

  • Ícono 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 hay pruebas CTS para esta función.

Puede realizar la prueba manualmente instalando una aplicación de Google Play que lea y muestre 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.