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 denonSensorChanged
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.
- Implementieren Sie die
BnSensorPrivacyListener
Schnittstelle. Weitere Einzelheiten finden Sie unterSensorPrivacyPolicy
inCameraService.h
. - Registrieren Sie sich beim
SensorPrivacyManager
und erhalten Sie beim Start den Status der Kachel. Weitere Einzelheiten finden Sie unterSensorPrivacyPolicy::registerSelf
inCameraService.cpp
. - Behandeln Sie Änderungen im Status „Sensoren ausgeschaltet“ im Rückruf. Weitere Einzelheiten finden Sie unter
SensorPrivacyPolicy::onSensorPrivacyChanged
undCameraService::blockAllClients
inCameraService.cpp
. - 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
inCameraService.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.