Capteurs désactivés

En mode avion, les appareils peuvent toujours accéder à certains capteurs pour activer des fonctionnalités spécifiques, telles que la rotation de l'écran et la prise de photos. Android 10 propose un paramètre d'options pour les développeurs permettant de désactiver tous les capteurs d'un appareil. Cette fonctionnalité aide les développeurs à tester les fonctionnalités de leur application dans les situations où ces capteurs ne sont plus disponibles, et permet également aux utilisateurs de contrôler les capteurs de leur appareil.

Lorsqu'un développeur ou un utilisateur active Désactivation des capteurs dans les options pour les développeurs (Paramètres > Système > Options pour les développeurs > Blocs Réglages rapides pour les développeurs), un nouveau bloc s'affiche dans la barre des réglages rapides. Ils peuvent utiliser la carte pour empêcher les applications d'accéder à l'appareil photo, au micro et à tous les capteurs gérés par la classe SensorManager.

Avertissement:Cette option ne concerne que les applications qui accèdent aux capteurs via "SensorService", "CameraService" et "AudioPolicyService". Les fonctions de téléphonie n'utilisent pas "AudioPolicyService" et ont toujours accès au micro lors des appels téléphoniques.

Implémentation

Android 10 inclut une implémentation de référence qui gère la caméra, le micro et les capteurs SensorManager. Le service système qui gère l'état Désactivé des capteurs et informe les clients des changements d'état se trouve dans frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java. Le gestionnaire qui facilite l'accès à SensorPrivacyService dans le contexte d'une application se trouve dans frameworks/base/core/java/android/hardware/SensorPrivacyManager.java.

Si vos appareils utilisent l'implémentation par défaut de SensorService, CameraService et AudioPolicyService, aucune personnalisation supplémentaire n'est nécessaire pour la conception de référence. Si vous avez d'autres capteurs, consultez la section Personnalisation pour en savoir plus sur la prise en charge de cette fonctionnalité.

Problèmes courants

Lors de l'implémentation de cette fonctionnalité, il arrive que les applications d'appareil photo ne répondent pas correctement aux rappels onError, à la fois lors de la première tentative d'acquisition de l'appareil photo et lorsque l'appareil photo n'est plus disponible. Cela entraîne généralement le plantage de l'application lorsque cette carte est activée, mais cela peut être utilisé comme signal pour indiquer que la fonctionnalité se comporte comme prévu.

Ce comportement indique que l'application ne gère pas correctement le rappel onError dans CameraDevice.StateCallback. Lorsque l'option Désactivation des capteurs est activée, le rappel onError est appelé avec CameraDevice.StateCallback.ERROR_CAMERA_DISABLED défini comme valeur d'erreur. Mettez à jour les applications propriétaires pour qu'elles gèrent le rappel onError avec cette valeur en n'effectuant aucun appel ultérieur à CameraDevice tant qu'un appel openCamera ultérieur n'a pas abouti.

Comportement des capteurs

Lorsque l'option Capteurs désactivés est activée, les capteurs ne transmettent plus aucune donnée au système ni aux applications. Une application peut toujours demander un capteur et enregistrer un écouteur lorsque l'option Capteurs désactivés est activée, mais le silence est renvoyé pour le micro ou le rappel onSensorChanged n'est jamais appelé pour les capteurs. Dès que la carte est désactivée, ces mêmes écouteurs commencent à recevoir la sortie réelle du micro ou les rappels attendus vers onSensorChanged sans avoir à effectuer de travail supplémentaire. Le comportement par défaut des capteurs mis en sourdine est le suivant.

Appareil photo

Si une application utilise l'appareil photo lorsque l'option Désactivation des capteurs est activée, une erreur est envoyée à la méthode de rappel onError et CameraDevice est fermé.

Si une application tente d'accéder à l'appareil photo lorsque l'option Désactivation des capteurs est activée, une erreur est envoyée à la méthode de rappel onError.

Micro

Lorsque l'option Désactivation des capteurs est activée, l'accès au micro reste possible, mais seul le silence est renvoyé. Si une application utilise le micro lorsque l'option Désactivation des capteurs est activée, aucune erreur n'est générée, mais l'enregistrement est désactivé et renvoie simplement un tableau de zéros. Si Désactivation des capteurs est désactivé alors que l'application utilise toujours le micro, les données audio attendues sont renvoyées.

Si une application tente d'accéder au micro lorsque l'option Désactiver les capteurs est activée, le micro renvoie le silence.

Capteur

Lorsqu'une application tente d'accéder à d'autres capteurs lorsque l'option Capteurs désactivés est activée, le type de capteur influence le comportement par défaut:

  • Capteurs en continu:les capteurs de ce mode de création de rapports arrêtent de distribuer des événements. Si une application interagit avec un capteur en continu lorsque l'option Capteurs désactivés est activée, le capteur n'envoie aucune donnée supplémentaire à l'application tant que cette fonctionnalité n'est pas désactivée.
  • Événements de vidage:un vidage de capteur peut être demandé lorsque la carte est activée et que le rappel onFlushComplete est appelé pour indiquer que le vidage demandé a bien été effectué, mais qu'aucun nouvel événement avec des données de capteur n'est généré et renvoyé au rappel onSensorChanged.
  • Événements de modification:lorsque l'option Désactiver les capteurs est activée, aucun nouvel événement de modification n'est signalé.
  • Événements de déclenchement:lorsque l'option Capteurs désactivés est activée, les événements de déclenchement ne sont plus générés. Tous les événements existants sont terminés.

Personnalisation

Si vos appareils utilisent l'implémentation par défaut de SensorService, CameraService et AudioPolicyService, aucune personnalisation supplémentaire n'est nécessaire pour la conception de référence. Toutefois, vous pouvez prendre en charge les capteurs gérés en dehors de SensorManager, supprimer Désactivation des capteurs de vos appareils ou modifier l'UI système pour les blocs Réglages rapides pour les développeurs ou l'icône du bloc Désactivation des capteurs.

Prendre en charge davantage de capteurs

Si vos appareils contiennent des capteurs gérés en dehors de SensorManager, vous devez les prendre en charge à l'aide de SensorPrivacyService et SensorPrivacyManager.

Lorsque l'icône Désactivation des capteurs est activée, SensorPrivacyService appelle un rappel à sens unique pour tous les écouteurs enregistrés. Lorsque ce rappel est reçu, l'écouteur enregistré peut prendre les mesures nécessaires en fonction de l'état de la carte. Si elle est activée, toutes les connexions existantes peuvent être interrompues et renvoyer des données vides, et un indicateur est défini pour empêcher de nouvelles connexions. Si elle est désactivée, l'indicateur peut être réinitialisé pour autoriser de nouvelles connexions. À l'aide du service de caméra (platform/frameworks/av/services/camera/libcameraservice/) comme exemple, procédez comme suit pour prendre en charge un nouveau capteur.

  1. Implémentez l'interface BnSensorPrivacyListener. Pour en savoir plus, consultez SensorPrivacyPolicy dans CameraService.h.
  2. Enregistrez-vous auprès de SensorPrivacyManager et obtenez l'état de la carte au démarrage. Pour en savoir plus, consultez SensorPrivacyPolicy::registerSelf dans CameraService.cpp.
  3. Gérez les modifications d'état Capteurs désactivés dans le rappel. Pour en savoir plus, consultez SensorPrivacyPolicy::onSensorPrivacyChanged et CameraService::blockAllClients dans CameraService.cpp.
  4. Empêcher l'accès aux données des capteurs lorsque la carte est activée Pour en savoir plus, consultez la vérification des règles de confidentialité des capteurs dans CameraService::validateClientPermissionsLocked dans CameraService.cpp.

Supprimer "Capteurs désactivés"

En tant qu'outil de développement pour les tests, Désactivation des capteurs est masqué, car un utilisateur doit d'abord activer le mode développeur, puis choisir de rendre la carte disponible dans les paramètres.

Si vous ne souhaitez pas prendre en charge Désactivation des capteurs sur vos appareils, supprimez la balise de service de packages/apps/Settings/AndroidManifest.xml. Si vous supprimez la balise de service, vous ne pourrez pas activer le bloc Désactivation des capteurs depuis la page des blocs Réglages rapides pour les développeurs.

Modifier l'UI "Capteurs désactivés"

Deux éléments peuvent être personnalisés pour l'UI Désactivation des capteurs: l'icône affichée pour le bloc de paramètres rapides du développeur et l'icône affichée dans la barre d'état lorsque le bloc est activé. Pour personnaliser l'apparence de ces icônes, remplacez les fichiers suivants:

  • Icône du bloc Réglages rapides : packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
  • Icône de la barre d'état : frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml

Validation

Il s'agit d'un outil facultatif pour les développeurs. Aucun test CTS n'est donc effectué pour cette fonctionnalité.

Vous pouvez effectuer un test manuel en installant une application depuis Google Play qui lit et affiche tous les capteurs de l'appareil. Lorsque vous activez la carte Désactivation des capteurs, assurez-vous qu'aucune des valeurs des capteurs ne change, que le son du micro est coupé et que la caméra n'est pas accessible.