Sensoren aus

Im Flugmodus können Geräte weiterhin auf einige Sensoren zugreifen, um bestimmte Funktionen zu aktivieren, wie z. B. die Bildschirmdrehung und das Aufnehmen von Bildern. Android 10 bietet eine Entwickleroptionseinstellung zum Abschalten aller Sensoren in einem Gerät. Diese Funktion hilft Entwicklern, die Funktionalität ihrer App in Situationen zu testen, in denen diese Sensoren nicht verfügbar sind, und gibt Benutzern außerdem die Möglichkeit, die Sensoren in ihrem Gerät zu steuern.

Wenn ein Entwickler oder Benutzer „Sensoren aus“ in den Entwickleroptionen aktiviert ( Einstellungen > System > Entwickleroptionen > Entwicklerkacheln für Schnelleinstellungen ), wird in der Schnelleinstellungsleiste eine neue Kachel angezeigt. Sie können die Kachel verwenden, um zu verhindern, dass Apps auf die Kamera, das Mikrofon und alle von der SensorManager Klasse verwalteten Sensoren zugreifen.

Warnung: Diese Option betrifft nur Apps, die über „SensorService“, „CameraService“ und „AudioPolicyService“ auf die Sensoren zugreifen. Telefonfunktionen nutzen „AudioPolicyService“ nicht und haben bei Telefongesprächen weiterhin Zugriff auf das Mikrofon.

Implementierung

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

Wenn Ihre Geräte die Standardimplementierung von SensorService , CameraService und AudioPolicyService verwenden, ist keine zusätzliche Anpassung des Referenzdesigns erforderlich. Wenn Sie über andere Sensoren verfügen, finden Sie unter „Anpassung“ weitere Einzelheiten zur Unterstützung dieser Funktion.

Häufige Probleme

Bei der Implementierung dieser Funktion reagieren Kamera-Apps manchmal nicht richtig auf die onError Rückrufe, sowohl beim ersten Versuch, die Kamera abzurufen, als auch wenn die Kamera nicht mehr verfügbar ist. Dies führt normalerweise dazu, dass die App abstürzt, wenn diese Kachel aktiviert ist. Dies kann jedoch als Signal dafür verwendet werden, dass sich die Funktion wie erwartet verhält.

Dieses Verhalten weist darauf hin, dass die App den onError Rückruf in CameraDevice.StateCallback nicht ordnungsgemäß verarbeitet. Wenn „Sensoren aus“ aktiviert ist, wird der onError Rückruf aufgerufen, wobei CameraDevice.StateCallback.ERROR_CAMERA_DISABLED als Fehlerwert festgelegt ist. Aktualisieren Sie alle Erstanbieter-Apps so, dass sie den onError Rückruf mit diesem Wert verarbeiten, indem Sie keine weiteren Aufrufe an CameraDevice tätigen, bis ein nachfolgender openCamera Aufruf erfolgreich ist.

Sensorverhalten

Wenn „Sensoren aus“ aktiviert ist, melden die Sensoren keine Daten mehr an das System oder die Apps. Eine App kann weiterhin einen Sensor anfordern und einen Zuhörer registrieren, wenn „Sensoren aus“ aktiviert ist, aber entweder wird Stille für das Mikrofon zurückgegeben oder der onSensorChanged Rückruf wird nie für die Sensoren aufgerufen. Sobald die Kachel deaktiviert ist, empfangen dieselben Zuhörer die tatsächliche Ausgabe des Mikrofons oder die erwarteten Rückrufe an onSensorChanged , ohne dass zusätzliche Arbeit erforderlich ist. Das Standardverhalten stummgeschalteter Sensoren ist wie folgt.

Kamera

Wenn eine App die Kamera verwendet, während „Sensoren aus“ aktiviert ist, wird ein Fehler an die Rückrufmethode onError gesendet und CameraDevice geschlossen.

Wenn eine App versucht, auf die Kamera zuzugreifen, während „Sensoren aus“ aktiviert ist, wird ein Fehler an die Rückrufmethode onError 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 Aufzeichnung wird stummgeschaltet und gibt lediglich eine Reihe von Nullen zurück. Wenn „Sensoren aus“ deaktiviert ist, während die App noch das Mikrofon verwendet, werden die erwarteten Audiodaten zurückgegeben.

Wenn eine App versucht, auf das Mikrofon zuzugreifen, während „Sensoren aus“ aktiviert ist, gibt das Mikrofon Stille zurück.

Sensor

Wenn eine App versucht, auf andere Sensoren zuzugreifen, wenn „Sensoren aus“ aktiviert ist, beeinflusst der Sensortyp das Standardverhalten:

  • Kontinuierliche Sensoren: Sensoren in diesem Berichtsmodus hören auf, Ereignisse auszusenden. 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.
  • Spülereignisse: Eine Sensorspülung kann angefordert werden, wenn die Kachel aktiviert ist und der onFlushComplete Rückruf aufgerufen wird, um anzuzeigen, dass die angeforderte Spülung erfolgreich abgeschlossen wurde, aber keine neuen Ereignisse mit Sensordaten generiert und an den onSensorChanged Rückruf zurückgegeben werden.
  • Bei Änderungsereignissen: Wenn „Sensoren aus“ aktiviert ist, werden keine neuen Änderungsereignisse gemeldet.
  • Triggerereignisse: Wenn „Sensoren aus“ aktiviert ist, werden keine Triggerereignisse mehr generiert. Alle vorhandenen Ereignisse werden abgeschlossen.

Anpassung

Wenn Ihre Geräte die Standardimplementierung von SensorService , CameraService und AudioPolicyService verwenden, 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 Systembenutzeroberfläche für die Entwickler-Schnelleinstellungskacheln oder das Symbol für die Kachel „Sensoren aus“ ändern.

Unterstützen Sie mehr Sensoren

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

Wenn die Kachel „Sensoren aus“ umgeschaltet wird, ruft SensorPrivacyService einen unidirektionalen Rückruf für alle registrierten Listener auf. Wenn dieser Rückruf empfangen wird, kann der registrierte Listener basierend auf dem Status der Kachel die erforderlichen Schritte unternehmen. Wenn es aktiviert ist, können alle bestehenden Verbindungen beendet werden und leere Daten zurückgeben sowie ein Flag gesetzt werden, um neue Verbindungen zu verhindern. Wenn es deaktiviert ist, kann das Flag zurückgesetzt werden, um neue Verbindungen zuzulassen. Führen Sie am Beispiel des Kameradienstes ( platform/frameworks/av/services/camera/libcameraservice/ ) die folgenden Schritte aus, um Unterstützung für einen neuen Sensor hinzuzufügen.

  1. Implementieren Sie die BnSensorPrivacyListener Schnittstelle. Weitere Einzelheiten finden Sie unter SensorPrivacyPolicy in CameraService.h .
  2. Registrieren Sie sich beim SensorPrivacyManager und erhalten Sie beim Start den Status der Kachel. Weitere Einzelheiten finden Sie unter SensorPrivacyPolicy::registerSelf in CameraService.cpp .
  3. Behandeln Sie Änderungen im Status „Sensoren ausgeschaltet“ im Rückruf. Weitere Einzelheiten finden Sie unter SensorPrivacyPolicy::onSensorPrivacyChanged und CameraService::blockAllClients in CameraService.cpp .
  4. Verhindern Sie den Zugriff auf die Sensordaten, wenn die Kachel aktiviert ist. Weitere Informationen finden Sie in der Überprüfung der Sensor-Datenschutzrichtlinie in CameraService::validateClientPermissionsLocked in CameraService.cpp .

Entfernen Sie die Sensoren

Da es sich um ein Entwicklertool zum Testen handelt, ist „Sensoren aus“ ausgeblendet, da ein Benutzer zunächst den Entwicklermodus aktivieren und dann in den Einstellungen auswählen muss, ob die Kachel verfügbar gemacht werden soll.

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

Ändern Sie die Benutzeroberfläche „Sensoren aus“.

Es gibt zwei Elemente, die für die Benutzeroberfläche „Sensoren aus“ angepasst werden können: das Symbol, das für die Kachel „Entwickler-Schnelleinstellungen“ angezeigt wird, und das Symbol, das in der Statusleiste angezeigt wird, wenn die Kachel aktiviert ist. Um das Aussehen dieser Symbole anzupassen, ersetzen Sie diese Dateien:

  • Kachelsymbol für Schnelleinstellungen: packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
  • Statusleistensymbol: frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml

Validierung

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

Sie können den Test manuell durchführen, indem Sie eine App von Google Play installieren, die alle Sensoren des Geräts ausliest und anzeigt. Wenn Sie die Kachel „Sensoren aus“ aktivieren, stellen Sie sicher, dass sich keine Werte für die Sensoren ändern, der Mikrofonton stumm ist und auf die Kamera nicht zugegriffen werden kann.