Sensori disattivati

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 callback onSensorChanged.
  • 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.

  1. Implementa l'interfaccia BnSensorPrivacyListener. Per maggiori dettagli, consulta SensorPrivacyPolicy in CameraService.h.
  2. Registrati con SensorPrivacyManager e ottieni lo stato del riquadro all'avvio. Per maggiori dettagli, consulta SensorPrivacyPolicy::registerSelf in CameraService.cpp.
  3. Gestisci le modifiche dello stato Sensori spenti nel callback. Per maggiori dettagli, consulta SensorPrivacyPolicy::onSensorPrivacyChanged e CameraService::blockAllClients in CameraService.cpp.
  4. 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 in CameraService.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.