O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Sensores desligados

Quando no modo avião, os dispositivos ainda podem acessar alguns sensores para habilitar funcionalidades específicas, como rotação da tela e tirar fotos. O Android 10 oferece uma configuração de opções do desenvolvedor para desligar todos os sensores em um dispositivo. Esse recurso ajuda os desenvolvedores a testar a funcionalidade de seus aplicativos em situações em que esses sensores ficam indisponíveis e também oferece aos usuários uma maneira de controlar os sensores em seus dispositivos.

Quando um desenvolvedor ou usuário ativa Sensores desativados nas opções do desenvolvedor ( Configurações > Sistema > Opções do desenvolvedor > Blocos do desenvolvedor de configurações rápidas ), um novo bloco aparece na bandeja de configurações rápidas. Eles podem usar o bloco para impedir que os aplicativos acessem a câmera, o microfone e todos os sensores gerenciados pela classe SensorManager .

Implementação

O Android 10 inclui uma implementação de referência que lida com os sensores de câmera, microfone e SensorManager . O serviço do sistema que gerencia o estado dos Sensores desligados e notifica os clientes sobre mudanças de estado está localizado em frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java . O gerenciador que facilita o acesso a SensorPrivacyService dentro do contexto de um aplicativo está localizado em frameworks/base/core/java/android/hardware/SensorPrivacyManager.java .

Se seus dispositivos usam a implementação padrão de SensorService , CameraService e AudioPolicyService , nenhuma personalização adicional é necessária para o design de referência. Se você tiver outros sensores, consulte Personalização para obter mais detalhes sobre o suporte a esse recurso.

Problemas comuns

Ao implementar esse recurso, às vezes os aplicativos da câmera não respondem adequadamente aos retornos de chamada onError , tanto na primeira tentativa de adquirir a câmera quanto quando a câmera não está mais disponível. Normalmente, isso resulta na falha do aplicativo quando este bloco é ativado, mas pode ser usado como um sinal para indicar que o recurso está se comportando conforme o esperado.

Esse comportamento indica que o aplicativo não está manipulando adequadamente o retorno de chamada onError em CameraDevice.StateCallback . Quando Sensores desligados está habilitado, o retorno de chamada onError é invocado com CameraDevice.StateCallback.ERROR_CAMERA_DISABLED definido como o valor de erro. Atualize todos os aplicativos CameraDevice para lidar com o retorno de chamada onError com este valor, não fazendo chamadas subsequentes para CameraDevice até que uma chamada openCamera subsequente seja bem-sucedida.

Comportamento do sensor

Quando Sensores desligados está habilitado, os sensores param de relatar quaisquer dados ao sistema ou aplicativos. Um aplicativo ainda pode solicitar um sensor e registrar um ouvinte quando Sensores desligados está ativado, mas o silêncio é retornado para o microfone ou o retorno de chamada onSensorChanged nunca é invocado para os sensores. Assim que o bloco é desabilitado, esses mesmos ouvintes começam a receber a saída real do microfone ou os retornos de chamada esperados para onSensorChanged sem a necessidade de qualquer trabalho adicional. O comportamento padrão dos sensores silenciados é o seguinte.

Câmera

Se um aplicativo estiver usando a câmera quando Sensores desligados estiver ativado, um erro será enviado ao método de retorno de chamada onError e o CameraDevice será fechado.

Se um aplicativo tentar acessar a câmera quando Sensores desligados estiver habilitado, um erro será enviado ao método de retorno de chamada onError .

Microfone

Quando Sensores desligados está habilitado, o acesso ao microfone ainda é possível, mas apenas o silêncio é retornado. Se um aplicativo estiver usando o microfone quando Sensores desligados estiver habilitado, nenhum erro será gerado, mas a gravação será silenciada e apenas retornará uma matriz de zeros. Se Sensores desligados estiver desativado enquanto o aplicativo ainda estiver usando o microfone, os dados de áudio esperados serão retornados.

Se um aplicativo tentar acessar o microfone quando Sensores desligados estiver ativado, o microfone retornará o silêncio.

Sensor

Quando um aplicativo tenta acessar outros sensores quando Sensores desligados está ativado, o tipo de sensor influencia o comportamento padrão:

  • Sensores contínuos: os sensores neste modo de relatório param de despachar eventos. Se um aplicativo estiver interagindo com um sensor contínuo quando Sensores desligados estiver habilitado, o sensor não enviará dados adicionais ao aplicativo até que o recurso seja desabilitado.
  • Eventos de onFlushComplete uma onFlushComplete sensor pode ser solicitada quando o bloco é habilitado e o retorno de chamada onFlushComplete é invocado para indicar que a onFlushComplete solicitada foi concluída com êxito, mas nenhum novo evento com dados de sensor é gerado e retornado ao retorno de chamada onSensorChanged .
  • Eventos de mudança: Quando Sensores desligados está habilitado, nenhum novo evento de mudança é relatado.
  • Eventos de gatilho: quando Sensores desligados está habilitado, os eventos de gatilho param de ser gerados. Todos os eventos existentes são concluídos.

Costumização

Se seus dispositivos usam a implementação padrão de SensorService , CameraService e AudioPolicyService , nenhuma personalização adicional é necessária para o design de referência. No entanto, você pode oferecer suporte a sensores gerenciados fora do SensorManager , remover sensores de seus dispositivos ou alterar a IU do sistema para os blocos de configurações rápidas do desenvolvedor ou o ícone para os sensores fora do bloco.

Suportando mais sensores

Se os seus dispositivos contêm sensores gerenciados fora do SensorManager , você deve adicionar suporte para eles usando SensorPrivacyService e SensorPrivacyManager .

Quando o bloco Sensores desligados é alternado, SensorPrivacyService invoca um retorno de chamada SensorPrivacyService para todos os ouvintes registrados. Quando esse retorno de chamada é recebido, o ouvinte registrado pode executar as etapas necessárias com base no estado do bloco. Se estiver habilitado, todas as conexões existentes podem ser encerradas e retornar dados vazios e um sinalizador definido para evitar novas conexões. Se estiver desabilitado, o sinalizador pode ser redefinido para permitir novas conexões. Usando o serviço de câmera ( platform/frameworks/av/services/camera/libcameraservice/ ) como exemplo, siga estas etapas para adicionar suporte para um novo sensor.

  1. Implemente a interface BnSensorPrivacyListener . Para obter mais detalhes, consulte SensorPrivacyPolicy em CameraService.h .
  2. Registre-se no SensorPrivacyManager e obtenha o estado do ladrilho na inicialização. Para obter mais detalhes, consulte SensorPrivacyPolicy::registerSelf em CameraService.cpp .
  3. Lidar com as mudanças de estado dos sensores desligados no retorno de chamada. Para obter mais detalhes, consulte SensorPrivacyPolicy::onSensorPrivacyChanged e CameraService::blockAllClients em CameraService.cpp .
  4. Impedir o acesso aos dados do sensor quando o bloco está habilitado. Para obter mais detalhes, consulte a verificação da política de privacidade do sensor em CameraService::validateClientPermissionsLocked em CameraService.cpp .

Removendo Sensores

Como uma ferramenta de desenvolvedor para teste, Sensores desligados está oculto porque um usuário deve primeiro ativar o modo de desenvolvedor e, em seguida, optar por disponibilizar o bloco nas configurações.

Se você não quiser oferecer suporte a Sensors off em seus dispositivos, remova a etiqueta de serviço de packages/apps/Settings/AndroidManifest.xml . Se você remover a etiqueta de serviço, o bloco Sensores desativados não estará disponível para habilitação na página de blocos de configurações rápidas do desenvolvedor.

Alteração dos sensores da IU

Existem dois elementos que podem ser personalizados para a interface de usuário Sensores desligados : o ícone exibido para o bloco de configurações rápidas do desenvolvedor e o ícone exibido na barra de status quando o bloco é habilitado. Para personalizar a aparência desses ícones, substitua estes arquivos:

  • Ícone de bloco de configurações rápidas: packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
  • Ícone da barra de status: frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml

Validação

Como uma ferramenta de desenvolvedor opcional, não há testes CTS para esse recurso.

Você pode testar manualmente instalando um aplicativo do Google Play que lê e exibe todos os sensores do dispositivo. Ao habilitar o bloco Sensores desativados , certifique-se de que nenhum dos valores dos sensores seja alterado, o áudio do microfone seja silencioso e a câmera não esteja acessível.