No modo avião, os dispositivos ainda podem acessar alguns sensores para ativar funcionalidades específicas, como rotação da tela e captura de fotos. O Android 10 oferece uma configuração de opções para desenvolvedores para desativar todos os sensores em um dispositivo. Esse recurso ajuda os desenvolvedores a testar a funcionalidade do app em situações em que esses sensores se tornam indisponíveis e também oferece aos usuários uma maneira de controlar os sensores nos dispositivos.
    Quando um desenvolvedor ou usuário ativa a opção Sensors off nas opções
    do desenvolvedor (Settings > System >
    Developer options > Quick settings developer
    tiles), um novo bloco aparece na bandeja de configurações rápidas. Eles podem usar
    o Bloco para impedir que os apps acessem a câmera, o microfone e todos os sensores
    gerenciados pela classe SensorManager.
    
Aviso:essa opção afeta apenas os apps que acessam os sensores por meio de "SensorService", "CameraService" e "AudioPolicyService". As funções de telefonia não usam "AudioPolicyService" e ainda têm acesso ao microfone durante as ligações.
Implementação
    O Android 10 inclui uma implementação de referência que
    processa a câmera, o microfone e os sensores SensorManager. O
    serviço do sistema que gerencia o estado Sensores desativados 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
    no contexto de um aplicativo está localizado em
    frameworks/base/core/java/android/hardware/SensorPrivacyManager.java.
    
    Caso seus dispositivos usem a implementação padrão de SensorService,
    CameraService e AudioPolicyService, nenhuma
    personalização extra é necessária para o design de referência. Se você tiver outros
    sensores, consulte Personalização para mais detalhes
      sobre a compatibilidade com esse recurso.
    
Problemas comuns
    Ao implementar esse recurso, às vezes os apps de câmera não respondem corretamente
    aos callbacks onError, tanto na primeira tentativa de aquisição
    da câmera quanto quando ela não está mais disponível. Isso geralmente resulta
    na falha do app quando esse bloco é ativado, mas pode ser usado como um indicador
    para indicar que o recurso está funcionando como esperado.
    
    Esse comportamento indica que o app não está processando corretamente o
    callback onError em
    CameraDevice.StateCallback. Quando
    Sensors off está ativado, o callback onError
    é invocado com
    CameraDevice.StateCallback.ERROR_CAMERA_DISABLED
    definido como o valor de erro. Atualize todos os apps próprios para processar o
    callback onError com esse valor, não fazendo chamadas
    subsequentes em
    CameraDevice até que uma chamada
    openCamera subsequente seja bem-sucedida.
    
Comportamento do sensor
    Quando a opção Sensores desativados está ativada, os sensores param de enviar
    dados para o sistema ou apps. Um app ainda pode solicitar um sensor e registrar um
    listener quando a opção Sensores desativados estiver ativada, mas o silêncio
    será retornado para o microfone ou o callback onSensorChanged nunca será
    invocado para os sensores. Assim que o bloco é desativado, esses mesmos listeners
    começam a receber a saída real do microfone ou os callbacks esperados para
    onSensorChanged sem precisar fazer nenhum trabalho extra. O
    comportamento padrão dos sensores silenciados é o seguinte.
    
Câmera
    Se um app estiver usando a câmera quando a opção Sensores desativados estiver ativada,
    um erro será enviado para o método de callback onError e
    CameraDevice será fechado.
    
    Se um app tentar acessar a câmera quando a opção Sensors off estiver
    ativada, um erro será enviado para o método de callback onError.
    
Microfone
Quando a opção Sensors off está ativada, o acesso ao microfone ainda é possível, mas apenas o silêncio é retornado. Se um app estiver usando o microfone quando Sensores desativados estiver ativado, nenhum erro será gerado, mas a gravação será silenciada e retornará apenas uma matriz de zeros. Se a opção Sensors off estiver desativada enquanto o app ainda estiver usando o microfone, os dados de áudio esperados serão retornados.
Se um app tentar acessar o microfone quando a opção Sensores desativados estiver ativada, o microfone vai retornar silêncio.
Sensor
Quando um app tenta acessar outros sensores com a opção Sensores desativados ativada, o tipo de sensor influencia o comportamento padrão:
- Sensores contínuos:os sensores nesse modo de relatório param de enviar eventos. Se um app estiver interagindo com um sensor contínuo quando Sensores desativados estiver ativado, o sensor não enviará dados adicionais para o app até que o recurso seja desativado.
- Eventos de limpeza:um sensor pode ser limpo quando o bloco
    está ativado e o callback onFlushCompleteé invocado para indicar que a limpeza solicitada foi concluída, mas nenhum evento novo com dados do sensor é gerado e retornado ao callbackonSensorChanged.
- Eventos de mudança:quando a opção Sensors off está ativada, nenhum novo evento de mudança é informado.
- Eventos de acionamento:quando a opção Sensores desativados está ativada, os eventos de acionamento param de ser gerados. Todos os eventos atuais são concluídos.
Personalização
    Caso seus dispositivos usem a implementação padrão de
    SensorService, CameraService e
    AudioPolicyService, nenhuma outra personalização é
    necessária para o design de referência. No entanto, é possível oferecer suporte a sensores gerenciados
    fora de SensorManager, remover Sensores desativados
    dos dispositivos ou mudar a IU do sistema para os blocos de configurações rápidas
    do desenvolvedor ou o ícone do bloco Sensores desativados.
    
Oferecer suporte a mais sensores
    Se os dispositivos tiverem sensores gerenciados fora da SensorManager,
    adicione suporte a eles usando SensorPrivacyService e
    SensorPrivacyManager.
    
    Quando o bloco Sensores desativados é alternado,
    SensorPrivacyService invoca um callback unidirecional para todos os listeners
    registrados. Quando esse callback é recebido, o listener registrado pode realizar as
    etapas necessárias com base no estado do bloco. Se estiver ativado, todas
    as conexões atuais poderão ser encerradas e retornar dados vazios, e uma flag será definida para
    impedir novas conexões. Se estiver desativada, a flag poderá ser redefinida 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 a um novo sensor.
    
- Implemente a interface BnSensorPrivacyListener. Para mais detalhes, consulteSensorPrivacyPolicyemCameraService.h.
- Registre-se com o SensorPrivacyManagere receba o estado do bloco na inicialização. Para mais detalhes, consulteSensorPrivacyPolicy::registerSelfemCameraService.cpp.
- Processe as mudanças de estado Sensores desativados no callback. Para mais
    detalhes, consulte SensorPrivacyPolicy::onSensorPrivacyChangedeCameraService::blockAllClientsemCameraService.cpp.
- Impedir o acesso aos dados do sensor quando o Bloco estiver ativado. Para mais
    detalhes, consulte a verificação da política de privacidade do sensor em
    CameraService::validateClientPermissionsLockedemCameraService.cpp.
Remover "Sensores desativados"
Como uma ferramenta de desenvolvedor para testes, Sensors off fica oculta porque o usuário precisa primeiro ativar o modo de desenvolvedor e depois escolher disponibilizar o bloco nas configurações.
    Se você não quiser oferecer suporte a Sensores desativados nos seus dispositivos,
    remova a tag de serviço de
    packages/apps/Settings/AndroidManifest.xml. Se você remover a
    tag de serviço, o bloco Sensores desativados não vai estar disponível para ativação
    na página de blocos de configurações rápidas do desenvolvedor.
    
Mudar a interface "Sensores desativados"
Há dois elementos que podem ser personalizados para a interface Sensors off: o ícone exibido para o bloco de configurações rápidas do desenvolvedor e o ícone exibido na barra de status quando o bloco é ativado. Para personalizar a aparência desses ícones, substitua estes arquivos:
- Ícone do 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 opcional para desenvolvedores, não há testes do CTS para esse recurso.
Para testar manualmente, instale um app do Google Play que leia e mostre todos os sensores do dispositivo. Ao ativar o bloco Sensores desativados, verifique se nenhum dos valores dos sensores muda, se o áudio do microfone está em silêncio e se a câmera não está acessível.
