O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

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 permite Sensores off em opções de programador (Configurações> Sistema> Opções do desenvolvedor> rápidas definições do programador telhas), uma nova telha aparece nas definições rápidas bandeja. Eles podem usar a telha para evitar que aplicativos acessem a câmera, microfone e todos os sensores gerido pela SensorManager classe.

Aviso: Esta opção só afeta aplicativos que acessam os sensores através do `SensorService`,` CameraService`, e `AudioPolicyService`. As funções de telefonia não usam `AudioPolicyService` e ainda têm acesso ao microfone durante chamadas telefônicas.

Implementação

Android 10 inclui uma implementação de referência que manipula a câmara, o microfone e SensorManager sensores. O serviço de sistema que gere os sensores off estaduais e notifica os clientes de mudanças de estado está localizado na frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java . O gerente que facilita o acesso a SensorPrivacyService dentro do contexto de uma aplicação está localizada em frameworks/base/core/java/android/hardware/SensorPrivacyManager.java .

Se os seus dispositivos de usar a implementação padrão de SensorService , CameraService e AudioPolicyService , em seguida, personalização nenhum adicional é necessário para o design de referência. Se você tiver outros sensores, consulte Personalização para mais detalhes sobre suporte a este recurso.

Problemas comuns

Ao implementar este recurso, por vezes, aplicativos de câmera não respondem adequadamente aos onError chamadas de retorno, tanto quando a primeira tentativa de adquirir a câmera e quando a câmera não está mais disponível. Normalmente, isso resulta na falha do aplicativo quando este bloco é habilitado, mas pode ser usado como um sinal para indicar que o recurso está se comportando conforme o esperado.

Este comportamento indica que o aplicativo não está a lidar corretamente o onError callback em CameraDevice.StateCallback . Quando Sensores off está ativada, o onError callback é invocado com CameraDevice.StateCallback.ERROR_CAMERA_DISABLED definido como o valor de erro. Atualizar quaisquer aplicativos primários para lidar com a onError callback com este valor por não fazer quaisquer chamadas subsequentes contra CameraDevice até que uma subseqüente openCamera chamada for bem sucedida.

Comportamento do sensor

Quando Sensores off está ativada, os sensores parar de relatar quaisquer dados para o sistema ou aplicativos. Um aplicativo ainda pode solicitar um sensor e registrar um ouvinte quando Sensores fora está habilitado, mas de qualquer silêncio é devolvido para o microfone ou a onSensorChanged callback nunca é invocado para os sensores. Assim que o azulejo está desativado, esses mesmos ouvintes começam a receber a saída real do microfone ou os retornos esperados para onSensorChanged sem a necessidade de fazer qualquer trabalho adicional. O comportamento padrão dos sensores silenciados é o seguinte.

Câmera

Se um aplicativo estiver usando a câmera quando Sensores off está ativada, um erro é enviado para o onError método de retorno e CameraDevice está fechado.

Se um aplicativo tenta acessar a câmera quando Sensores off está ativada, um erro é enviado para o onError método de retorno.

Microfone

Quando Sensores off está ativada, o acesso ao microfone ainda é possível, mas apenas o silêncio é retornado. Se um aplicativo está usando o microfone quando Sensores fora está habilitado, nenhum erro é gerado, mas a gravação é silenciado e apenas retorna uma matriz de zeros. Se Sensores off é desactivado enquanto o aplicativo ainda está usando o microfone, os dados de áudio esperado é retornado.

Se um aplicativo tenta acessar o microfone quando Sensores off está habilitado, o silêncio do microfone retornos.

Sensor

Quando um aplicativo tenta acessar outros sensores quando os sensores off está ativada, o tipo de sensor influencia o comportamento padrão:

  • Sensores contínuos: Sensores neste modo de paragem reporte despachar eventos. Se um aplicativo está interagindo com um sensor contínuo quando os sensores de fora está habilitado, o sensor envia quaisquer dados adicionais para o aplicativo até que o recurso está desativado.
  • Eventos nivelados: Um rubor sensor pode ser solicitada quando o azulejo está ativado eo onFlushComplete callback é invocado para indicar que o flush solicitada foi concluída com sucesso, mas há novos eventos com dados do sensor são gerados e devolvidos ao onSensorChanged callback.
  • Eventos-change: quando os sensores off está ativada, há novos eventos de alteração são relatados.
  • Os eventos de disparo: quando os sensores de fora está habilitado, eventos de disparo parar de gerar. Todos os eventos existentes são concluídos.

Costumização

Se os seus dispositivos de usar a implementação padrão de SensorService , CameraService e AudioPolicyService , em seguida, personalização nenhum adicional é necessário para o design de referência. No entanto, você pode apoiar sensores fora gerenciado de SensorManager , remova Sensores fora de seus dispositivos, ou alterar a interface do usuário do sistema para o desenvolvedor de definições rápidas telhas ou o ícone para os sensores off telha.

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 os sensores off telha é alternado, SensorPrivacyService invoca um retorno de chamada de sentido único 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 da câmara ( platform/frameworks/av/services/camera/libcameraservice/ ) como um exemplo, siga estes passos para adicionar suporte para um novo sensor.

  1. Implementar o BnSensorPrivacyListener interface. Para mais detalhes, consulte SensorPrivacyPolicy em CameraService.h .
  2. Registre-se no SensorPrivacyManager e obter o estado da telha na inicialização. Para mais detalhes, consulte SensorPrivacyPolicy::registerSelf em CameraService.cpp .
  3. Sensores para fora do mudanças de estado no retorno de chamada. Para 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 mais detalhes, consulte a verificação de política de privacidade do sensor em CameraService::validateClientPermissionsLocked em CameraService.cpp .

Removendo Sensores

Como uma ferramenta de desenvolvedor para testes, Sensores off está invisível pois o usuário deve primeiro ativar o modo de desenvolvedor, em seguida, optar por fazer a telha disponível em configurações.

Se você não quiser apoiar Sensores fora em seus dispositivos, remova a etiqueta de serviço de packages/apps/Settings/AndroidManifest.xml . Se você remover a etiqueta de serviço, os sensores off telha não estarão disponíveis para permitir a partir da página as definições rápidas desenvolvedor telhas.

Alterando os Sensores da IU

Há dois elementos que podem ser personalizadas para os sensores fora UI: o ícone exibido para o azulejo desenvolvedor configurações rápidas e o ícone exibido na barra de status quando o azulejo está ativado. Para personalizar a aparência desses ícones, substitua estes arquivos:

  • Breve configurações ícone telha: packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
  • Ícone 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. Quando você ativa os sensores off azulejo, garantir que nenhum dos valores para a mudança sensores, o áudio do microfone é silencioso, ea câmera não está acessível.