In modalità aereo, i dispositivi possono comunque accedere ad alcuni sensori per attivare funzionalità specifiche, come la rotazione dello schermo e lo scatto di foto. Android 10 fornisce un'impostazione delle opzioni sviluppatore per disattivare tutti i sensori di un dispositivo. Questa funzionalità consente agli sviluppatori di testare la funzionalità della loro app in situazioni in cui questi sensori non sono disponibili e offre anche agli utenti un modo per controllarli sul proprio dispositivo.
Quando uno sviluppatore o un utente attiva Sensori disattivati nelle opzioni sviluppatore (Impostazioni > Sistema > Opzioni sviluppatore > Riquadri sviluppatore per impostazioni rapide), nella barra delle impostazioni rapide viene visualizzato un nuovo riquadro. Possono utilizzare
il riquadro per impedire alle app di accedere alla fotocamera, al microfono e a tutti i sensori
gestiti dalla classe SensorManager
.
Avviso:questa opzione interessa solo le app che accedono ai sensori tramite "SensorService", "CameraService" e "AudioPolicyService". Le funzioni di telefonia non utilizzano "AudioPolicyService" e hanno comunque accesso al microfono durante le telefonate.
Implementazione
Android 10 include un'implementazione di riferimento che gestisce la fotocamera, il microfono e i sensori SensorManager
. Il servizio di sistema che gestisce lo stato Sensori spenti e informa i client delle modifiche dello stato si trova in frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java
.
Il gestore che facilita l'accesso a SensorPrivacyService
nel contesto di un'applicazione si trova in
frameworks/base/core/java/android/hardware/SensorPrivacyManager.java
.
Se i tuoi dispositivi utilizzano l'implementazione predefinita di SensorService
,
CameraService
e AudioPolicyService
, non è necessaria alcuna
personalizzazione aggiuntiva del design di riferimento. Se hai altri sensori, consulta la sezione Personalizzazione per ulteriori dettagli sul supporto di questa funzionalità.
Problemi comuni
Quando implementi questa funzionalità, a volte le app della fotocamera non rispondono correttamente ai callback onError
, sia al primo tentativo di acquisire la fotocamera sia quando la fotocamera non è più disponibile. In genere, questo provoca un arresto anomalo dell'app quando il riquadro è attivato, ma può essere utilizzato come indicatore per indicare che la funzionalità si comporta come previsto.
Questo comportamento indica che l'app non gestisce correttamente il callback
onError
in
CameraDevice.StateCallback
. Quando
l'opzione Sensori disattivati è attivata, il callback onError
viene invocato con
CameraDevice.StateCallback.ERROR_CAMERA_DISABLED
impostato come valore di errore. Aggiorna le app proprietarie in modo che gestiscano il callback
onError
con questo valore non effettuando chiamate
successive a
CameraDevice
finché una chiamata
openCamera
successiva non va a buon fine.
Comportamento del sensore
Quando l'opzione Sensori disattivati è attiva, i sensori smettono di inviare dati al sistema o alle app. Un'app può comunque richiedere un sensore e registrare un ascoltatore quando l'opzione Sensori disattivati è attiva, ma viene restituito silenzio per il microfono o il callback onSensorChanged
non viene mai richiamato per i sensori. Non appena il riquadro viene disattivato, gli stessi ascoltatori
iniziano a ricevere l'output effettivo del microfono o i callback previsti per
onSensorChanged
senza dover fare altro. Il
comportamento predefinito dei sensori silenziati è il seguente.
Fotocamera
Se un'app utilizza la videocamera quando è attiva l'opzione Sensori disattivati, viene inviato un errore al metodo di callback onError
e CameraDevice
viene chiuso.
Se un'app tenta di accedere alla videocamera quando è attivata l'opzione Sensori disattivati, viene inviato un errore al metodo di callback onError
.
Microfono
Quando l'opzione Sensori disattivati è attiva, l'accesso al microfono è ancora possibile, ma viene restituito solo silenzio. Se un'app utilizza il microfono quando è attiva l'opzione Sensori disattivati, non viene generato alcun errore, ma la registrazione viene disattivata e viene restituito solo un array di zeri. Se l'opzione Sensori disabilitati è disattivata mentre l'app continua a utilizzare il microfono, vengono restituiti i dati audio previsti.
Se un'app tenta di accedere al microfono quando l'opzione Sensori disattivati è attiva, il microfono restituisce silenzio.
Sensore
Quando un'app tenta di accedere ad altri sensori quando l'opzione Sensori disattivati è attivata, il tipo di sensore influisce sul comportamento predefinito:
- Sensori continui: i sensori in questa modalità di generazione di report smettono di inviare eventi. Se un'app interagisce con un sensore continuo quando è attiva l'opzione Sensori disattivati, il sensore non invia dati aggiuntivi all'app finché la funzionalità non viene disattivata.
- Eventi di svuotamento: è possibile richiedere uno svuotamento del sensore quando il riquadro è attivato e viene invocato il callback
onFlushComplete
per indicare che lo svuotamento richiesto è stato completato correttamente, ma non vengono generati e restituiti nuovi eventi con dati del sensore al callbackonSensorChanged
. - Eventi di variazione: quando l'opzione Sensori spenti è attivata, non vengono registrati nuovi eventi di variazione.
- Eventi di attivazione:quando l'opzione Sensori disattivati è attivata, la generazione di eventi di attivazione viene interrotta. Eventuali eventi esistenti vengono completati.
Personalizzazione
Se i tuoi dispositivi utilizzano l'implementazione predefinita di
SensorService
, CameraService
e
AudioPolicyService
, non è necessaria alcuna personalizzazione aggiuntiva al design di riferimento. Tuttavia, puoi supportare i sensori gestiti al di fuori di SensorManager
, rimuovere Sensori disattivati dai tuoi dispositivi o modificare l'interfaccia utente di sistema per le schede delle Impostazioni rapide per gli sviluppatori o l'icona della scheda Sensori disattivati.
Supporta più sensori
Se i tuoi dispositivi contengono sensori gestiti al di fuori di SensorManager
,
devi aggiungerne il supporto utilizzando SensorPrivacyService
e
SensorPrivacyManager
.
Quando il riquadro Sensori disattivati è attivato,
SensorPrivacyService
invoca un callback unidirezionale per tutti gli ascoltatori registrati. Quando viene ricevuto questo callback, l'ascoltatore registrato può eseguire i passaggi necessari in base allo stato del riquadro. Se è attivata, tutte le connessioni esistenti possono essere interrotte e restituire dati vuoti, nonché un flag impostato per impedire nuove connessioni. Se è disattivato, il flag può essere reimpostato per consentire nuove connessioni. Utilizzando il servizio della videocamera
(platform/frameworks/av/services/camera/libcameraservice/
)
come esempio, segui questi passaggi per aggiungere il supporto di un nuovo sensore.
- Implementa l'interfaccia
BnSensorPrivacyListener
. Per maggiori dettagli, consultaSensorPrivacyPolicy
inCameraService.h
. - Registrati con
SensorPrivacyManager
e ottieni lo stato del riquadro all'avvio. Per maggiori dettagli, consultaSensorPrivacyPolicy::registerSelf
inCameraService.cpp
. - Gestisci le modifiche dello stato Sensori spenti nel callback. Per maggiori dettagli, consulta
SensorPrivacyPolicy::onSensorPrivacyChanged
eCameraService::blockAllClients
inCameraService.cpp
. - Impedisci l'accesso ai dati dei sensori quando il riquadro è attivo. Per maggiori dettagli, consulta la verifica delle norme sulla privacy del sensore in
CameraService::validateClientPermissionsLocked
inCameraService.cpp
.
Rimuovere l'opzione Sensori disattivati
Poiché è uno strumento per sviluppatori per i test, l'opzione Sensori disattivati è nascosta perché l'utente deve prima attivare la modalità sviluppatore, quindi scegliere di rendere disponibile il riquadro nelle impostazioni.
Se non vuoi supportare l'opzione Sensori spenti sui tuoi dispositivi,
rimuovi il tag di servizio da
packages/apps/Settings/AndroidManifest.xml
. Se rimuovi il
tag del servizio, il riquadro Sensori disattivati non sarà disponibile per l'attivazione
dalla pagina dei riquadri delle impostazioni rapide per gli sviluppatori.
Modificare l'interfaccia utente di Sensori disattivati
Esistono due elementi che possono essere personalizzati per l'interfaccia utente di Sensori disattivati: l'icona visualizzata per il riquadro delle impostazioni rapide per gli sviluppatori e l'icona visualizzata nella barra di stato quando il riquadro è attivo. Per personalizzare l'aspetto di queste icone, sostituisci i seguenti file:
- Icona del riquadro Impostazioni rapide:
packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
- Icona della barra di stato:
frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml
Convalida
Poiché si tratta di uno strumento per sviluppatori facoltativo, non sono disponibili test CTS per questa funzionalità.
Puoi eseguire il test manualmente installando un'app da Google Play che legga e mostri tutti i sensori del dispositivo. Quando attivi il riquadro Sensori spenti, assicurati che nessuno dei valori dei sensori cambi, che l'audio del microfono sia in silenzio e che la videocamera non sia accessibile.