Sensoren aus

Im Flugmodus können Geräte weiterhin auf einige Sensoren zugreifen, um bestimmte Funktionen zu aktivieren, z. B. die Bildschirmdrehung und die Aufnahme von Fotos. Android 10 bietet eine Entwickleroption, mit der alle Sensoren auf einem Gerät deaktiviert werden können. Mit dieser Funktion können Entwickler die Funktionen ihrer App in Situationen testen, in denen diese Sensoren nicht verfügbar sind. Außerdem haben Nutzer die Möglichkeit, die Sensoren auf ihrem Gerät zu steuern.

Wenn ein Entwickler oder Nutzer Sensoren aus in den Entwickleroptionen (Einstellungen > System > Entwickleroptionen > Kacheln für Schnelleinstellungen für Entwickler) aktiviert, wird eine neue Kachel im Bereich „Schnelleinstellungen“ angezeigt. Mit der Kachel können sie verhindern, dass Apps auf die Kamera, das Mikrofon und alle Sensoren zugreifen, die von der Klasse SensorManager verwaltet werden.

Warnung:Diese Option wirkt sich nur auf Apps aus, die über „SensorService“, „CameraService“ und „AudioPolicyService“ auf die Sensoren zugreifen. Telefonfunktionen verwenden „AudioPolicyService“ nicht und haben während Telefonanrufen weiterhin Zugriff auf das Mikrofon.

Implementierung

Android 10 enthält eine Referenzimplementierung, die die Kamera, das Mikrofon und die SensorManager-Sensoren verwaltet. Der Systemdienst, der den Status Sensoren aus verwaltet und Clients über Statusänderungen benachrichtigt, befindet sich unter frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java. Der Manager, der den Zugriff auf SensorPrivacyService im Kontext einer Anwendung ermöglicht, befindet sich in frameworks/base/core/java/android/hardware/SensorPrivacyManager.java.

Wenn auf Ihren Geräten die Standardimplementierung von SensorService, CameraService und AudioPolicyService verwendet wird, ist keine zusätzliche Anpassung des Referenzdesigns erforderlich. Wenn Sie andere Sensoren haben, finden Sie unter Anpassung weitere Informationen zur Unterstützung dieser Funktion.

Häufige Probleme

Bei der Implementierung dieser Funktion reagieren Kamera-Apps manchmal nicht richtig auf die onError-Callbacks, sowohl beim ersten Versuch, die Kamera zu erfassen, als auch wenn die Kamera nicht mehr verfügbar ist. Das führt in der Regel dazu, dass die App abstürzt, wenn diese Kachel aktiviert ist. Dies kann jedoch als Signal dafür dienen, dass die Funktion wie erwartet funktioniert.

Dieses Verhalten weist darauf hin, dass die App den onError-Callback in CameraDevice.StateCallback nicht richtig verarbeitet. Wenn Sensoren aus aktiviert ist, wird der onError-Callback mit CameraDevice.StateCallback.ERROR_CAMERA_DISABLED als Fehlerwert aufgerufen. Aktualisieren Sie alle eigenen Apps, damit der onError-Rückruf mit diesem Wert verarbeitet wird. Führen Sie keine weiteren Aufrufe an CameraDevice aus, bis ein nachfolgender openCamera-Aufruf erfolgreich war.

Sensorverhalten

Wenn Sensoren aus aktiviert ist, senden die Sensoren keine Daten mehr an das System oder an Apps. Eine App kann weiterhin einen Sensor anfordern und einen Listener registrieren, wenn Sensoren aus aktiviert ist. Es wird jedoch entweder Stille für das Mikrofon zurückgegeben oder der onSensorChanged-Callback wird nie für die Sensoren aufgerufen. Sobald die Kachel deaktiviert ist, erhalten dieseselben Listener die tatsächliche Ausgabe vom Mikrofon oder die erwarteten Rückrufe an onSensorChanged, ohne dass zusätzliche Arbeit erforderlich ist. Das Standardverhalten von stummgeschalteten Sensoren ist so:

Kamera

Wenn eine App die Kamera verwendet, während Sensoren aus aktiviert ist, wird eine Fehlermeldung an die onError-Callback-Methode gesendet und CameraDevice wird geschlossen.

Wenn eine App versucht, auf die Kamera zuzugreifen, während Sensoren aus aktiviert ist, wird an die onError-Callback-Methode ein Fehler gesendet.

Mikrofon

Wenn Sensoren aus aktiviert ist, ist der Zugriff auf das Mikrofon weiterhin möglich, es wird jedoch nur Stille zurückgegeben. Wenn eine App das Mikrofon verwendet, während Sensoren aus aktiviert ist, wird kein Fehler generiert, aber die Aufnahme wird stummgeschaltet und es wird nur ein Array mit Nullen zurückgegeben. Wenn Sensoren aus deaktiviert ist, während die App das Mikrofon weiterhin verwendet, werden die erwarteten Audiodaten zurückgegeben.

Wenn eine App versucht, auf das Mikrofon zuzugreifen, während Sensoren aus aktiviert ist, gibt das Mikrofon keine Tonsignale aus.

Sensor

Wenn eine App versucht, auf andere Sensoren zuzugreifen, während Sensoren aus aktiviert ist, wirkt sich der Sensortyp auf das Standardverhalten aus:

  • Kontinuierliche Sensoren:Sensoren in diesem Berichtsmodus senden keine Ereignisse mehr. Wenn eine App mit einem kontinuierlichen Sensor interagiert, während Sensoren aus aktiviert ist, sendet der Sensor keine zusätzlichen Daten an die App, bis die Funktion deaktiviert wird.
  • Leervorgänge:Ein Sensor-Leervorgang kann angefordert werden, wenn die Kachel aktiviert ist. Der onFlushComplete-Callback wird aufgerufen, um anzugeben, dass der angeforderte Vorgang erfolgreich abgeschlossen wurde. Es werden jedoch keine neuen Ereignisse mit Sensordaten generiert und an den onSensorChanged-Callback zurückgegeben.
  • Ereignisse bei Änderungen:Wenn Sensoren aus aktiviert ist, werden keine neuen Änderungsereignisse erfasst.
  • Trigger-Ereignisse:Wenn Sensoren aus aktiviert ist, werden keine Trigger-Ereignisse mehr generiert. Alle vorhandenen Ereignisse sind abgeschlossen.

Personalisierung

Wenn auf Ihren Geräten die Standardimplementierung von SensorService, CameraService und AudioPolicyService verwendet wird, ist keine zusätzliche Anpassung des Referenzdesigns erforderlich. Sie können jedoch Sensoren unterstützen, die außerhalb von SensorManager verwaltet werden, Sensoren aus von Ihren Geräten entfernen oder die System-UI für die Schnelleinstellungen für Entwickler oder das Symbol für die Kachel Sensoren aus ändern.

Mehr Sensoren unterstützen

Wenn Ihre Geräte Sensoren enthalten, die außerhalb von SensorManager verwaltet werden, sollten Sie mit SensorPrivacyService und SensorPrivacyManager Unterstützung für sie hinzufügen.

Wenn die Kachel Sensoren aus aktiviert wird, ruft SensorPrivacyService einen unidirektionalen Callback für alle registrierten Listener auf. Wenn dieser Callback empfangen wird, kann der registrierte Listener je nach Zustand der Kachel die erforderlichen Schritte ausführen. Wenn diese Option aktiviert ist, können alle vorhandenen Verbindungen beendet werden und es werden leere Daten zurückgegeben. Außerdem wird ein Flag gesetzt, um neue Verbindungen zu verhindern. Wenn es deaktiviert ist, kann das Flag zurückgesetzt werden, um neue Verbindungen zuzulassen. Anhand des Kameradiensts (platform/frameworks/av/services/camera/libcameraservice/) können Sie die folgenden Schritte ausführen, um die Unterstützung für einen neuen Sensor hinzuzufügen.

  1. Implementieren Sie die BnSensorPrivacyListener-Schnittstelle. Weitere Informationen finden Sie unter SensorPrivacyPolicy in CameraService.h.
  2. Registrieren Sie sich beim SensorPrivacyManager und rufen Sie den Status der Kachel beim Start ab. Weitere Informationen finden Sie unter SensorPrivacyPolicy::registerSelf in CameraService.cpp.
  3. Im Callback Statusänderungen des Typs Sensoren aus verarbeiten. Weitere Informationen finden Sie unter SensorPrivacyPolicy::onSensorPrivacyChanged und CameraService::blockAllClients in CameraService.cpp.
  4. Verhindern, dass bei aktivierter Kachel auf die Sensordaten zugegriffen wird. Weitere Informationen finden Sie in der Datenschutzrichtlinie für Sensoren unter CameraService::validateClientPermissionsLocked in CameraService.cpp.

„Sensoren aus“ entfernen

Als Entwicklertool für Tests ist Sensoren aus ausgeblendet, da ein Nutzer zuerst den Entwicklermodus aktivieren und dann festlegen muss, dass die Kachel in den Einstellungen verfügbar sein soll.

Wenn Sie Sensoren aus auf Ihren Geräten nicht unterstützen möchten, entfernen Sie das Dienst-Tag aus packages/apps/Settings/AndroidManifest.xml. Wenn Sie das Dienst-Tag entfernen, kann die Kachel Sensoren aus nicht mehr auf der Seite „Kacheln für Schnelleinstellungen für Entwickler“ aktiviert werden.

Benutzeroberfläche für „Sensoren aus“ ändern

Für die Benutzeroberfläche Sensoren aus können zwei Elemente angepasst werden: das Symbol für die Kachel „Schnelleinstellungen für Entwickler“ und das Symbol in der Statusleiste, wenn die Kachel aktiviert ist. Wenn Sie das Aussehen dieser Symbole anpassen möchten, ersetzen Sie die folgenden Dateien:

  • Symbol für die Kachel „Schnelleinstellungen“: packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
  • Statusleistensymbol: frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml

Zertifizierungsstufe

Da es sich um ein optionales Entwicklertool handelt, gibt es keine CTS-Tests für diese Funktion.

Sie können die Funktion manuell testen, indem Sie eine App von Google Play installieren, die alle Sensoren des Geräts liest und anzeigt. Wenn Sie die Kachel Sensoren aus aktivieren, darf sich keiner der Werte für die Sensoren ändern, das Mikrofon darf kein Audio aufnehmen und die Kamera darf nicht zugänglich sein.