Spiegare l'accesso a informazioni più sensibili

Le autorizzazioni relative a posizione, microfono e fotocamera concedono alla tua app l'accesso a informazioni particolarmente sensibili sugli utenti. La piattaforma include diversi meccanismi, descritti in questa pagina, per aiutare gli utenti a rimanere informati e a mantenere il controllo su quali app possono accedere alla posizione, al microfono e alla fotocamera.

Queste funzionalità di sistema che tutelano la privacy non dovrebbero influire sul modo in cui la tua app gestisce le autorizzazioni relative alla posizione, al microfono e alla fotocamera, a condizione che tu segua le best practice per la privacy.

In particolare, assicurati di svolgere le seguenti operazioni nella tua app:

Dashboard della privacy

Una sequenza temporale verticale mostra le diverse app che hanno
         eseguito l'accesso ai dati sulla posizione e l'ora in cui sono avvenuti gli accessi
Figura 1. Schermata di utilizzo della posizione, parte della Dashboard della privacy.

Sui dispositivi supportati con Android 12 o versioni successive, nelle impostazioni di sistema viene visualizzata una schermata della dashboard per la privacy. In questa schermata, gli utenti possono accedere a schermate separate che mostrano quando le app accedono alle informazioni sulla posizione, sulla fotocamera e sul microfono. Ogni schermata mostra una cronologia di quando diverse app hanno eseguito l'accesso a un tipo di dati specifico. La Figura 1 mostra la cronologia di accesso ai dati sulla posizione.

Mostra la motivazione dell'accesso ai dati

La tua app può fornire una motivazione agli utenti per aiutarli a capire perché l'app accede alle informazioni sulla posizione, sulla fotocamera o sul microfono. Questa motivazione può essere visualizzata nella nuova schermata Dashboard della privacy, nella schermata delle autorizzazioni dell'app o in entrambe.

Per spiegare perché la tua app accede alle informazioni su posizione, fotocamera e microfono, completa i seguenti passaggi:

  1. Aggiungi un'attività che, una volta avviata, fornisca una motivazione per cui la tua app esegue un determinato tipo di azione di accesso ai dati. All'interno di questa attività, imposta l'attributo android:permission su START_VIEW_PERMISSION_USAGE.

    Se la tua app ha come target Android 12 o versioni successive, devi definire esplicitamente un valore per l'attributo android:exported.

  2. Aggiungi il seguente filtro per intent all'attività appena aggiunta:

    <!-- android:exported required if you target Android 12. -->
    <activity android:name=".DataAccessRationaleActivity"
              android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
              android:exported="true">
           <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on
                your app permission's page in system settings.
                VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information
                icon on the Privacy Dashboard screen. -->
        <intent-filter>
           <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
           <action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" />
           <category android:name="android.intent.category.DEFAULT" />
           ...
        </intent-filter>
    </activity>
  3. Decidi cosa deve mostrare l'attività di motivazione dell'accesso ai dati. Ad esempio, potresti mostrare il sito web della tua app o un articolo del Centro assistenza. Per fornire una spiegazione più dettagliata dei tipi di dati a cui accede la tua app, nonché di quando è avvenuto l'accesso, gestisci gli extra che il sistema include quando richiama l'intent di utilizzo delle autorizzazioni:

A seconda dei filtri per intent che aggiungi, gli utenti vedono un'icona informazioni accanto al nome della tua app in alcune schermate:

  • Se aggiungi il filtro per intent che contiene l'azione VIEW_PERMISSION_USAGE, gli utenti vedono l'icona nella pagina delle autorizzazioni dell'app nelle impostazioni di sistema. Puoi applicare questa azione a tutte le autorizzazioni di runtime.
  • Se aggiungi il filtro per intent che contiene l'azione VIEW_PERMISSION_USAGE_FOR_PERIOD, gli utenti vedono l'icona accanto al nome della tua app ogni volta che l'app viene visualizzata nella schermata della dashboard per la privacy.

Quando gli utenti selezionano l'icona, viene avviata l'attività di spiegazione della tua app.

Un rettangolo arrotondato nell'angolo in alto a destra, che include un'icona della fotocamera e un'icona del microfono
Figura 2. Indicatori di microfono e fotocamera, che mostrano l'accesso recente ai dati.

Indicatori

Sui dispositivi con Android 12 o versioni successive, quando un'app accede al microfono o alla fotocamera, viene visualizzata un'icona nella barra di stato. Se l'app è in modalità immersiva, l'icona viene visualizzata nell'angolo in alto a destra dello schermo. Gli utenti possono aprire le Impostazioni rapide e selezionare l'icona per visualizzare le app che stanno utilizzando il microfono o la fotocamera. La figura 2 mostra uno screenshot di esempio che contiene le icone.

Identifica la posizione degli indicatori sullo schermo

Se la tua app supporta la modalità immersiva o una UI a schermo intero, gli indicatori potrebbero sovrapporsi momentaneamente alla UI dell'app. Per aiutarti ad adattare la UI a questi indicatori, il sistema introduce il metodo getPrivacyIndicatorBounds(), come mostrato nello snippet di codice riportato di seguito. Utilizzando questa API, puoi identificare i limiti in cui potrebbero apparire gli indicatori. Potresti quindi decidere di organizzare la UI dello schermo in modo diverso.

Kotlin

view.setOnApplyWindowInsetsListener { view, windowInsets ->
    val indicatorBounds = windowInsets.getPrivacyIndicatorBounds()
    // change your UI to avoid overlapping
    windowInsets
}

Pulsanti di attivazione/disattivazione

I riquadri Impostazioni rapide sono etichettati come &quot;Accesso alla fotocamera&quot; e &quot;Accesso al microfono&quot;.
Figura 3. Attivazione/disattivazione di microfono e fotocamera nelle Impostazioni rapide.

Sui dispositivi supportati con Android 12 o versioni successive, gli utenti possono attivare e disattivare l'accesso alla fotocamera e al microfono per tutte le app sul dispositivo premendo un'unica opzione di attivazione/disattivazione. Gli utenti possono accedere alle opzioni attivabili/disattivabili dalle Impostazioni rapide, come mostrato nella figura 3, o dalla schermata Privacy nelle impostazioni di sistema.

I pulsanti di attivazione/disattivazione della fotocamera e del microfono influiscono su tutte le app del dispositivo:

  • Quando l'utente disattiva l'accesso alla fotocamera, l'app riceve un feed videocamera vuoto.
  • Quando l'utente disattiva l'accesso al microfono, l'app riceve audio silenzioso. Inoltre, i sensori di movimento sono soggetti a limitazione di frequenza, indipendentemente dal fatto che dichiari o meno l'autorizzazione HIGH_SAMPLING_RATE_SENSORS.

Quando l'utente disattiva l'accesso alla fotocamera o al microfono e poi avvia un'app che richiede l'accesso alle informazioni della fotocamera o del microfono, il sistema ricorda all'utente che l'opzione di attivazione/disattivazione a livello di dispositivo è disattivata.

Controlla l'assistenza per i dispositivi

Per verificare se un dispositivo supporta l'attivazione/disattivazione del microfono e della fotocamera, aggiungi la logica visualizzata nel seguente snippet di codice:

Kotlin

val sensorPrivacyManager = applicationContext
        .getSystemService(SensorPrivacyManager::class.java)
        as SensorPrivacyManager
val supportsMicrophoneToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.MICROPHONE)
val supportsCameraToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.CAMERA)

Java

SensorPrivacyManager sensorPrivacyManager = getApplicationContext()
        .getSystemService(SensorPrivacyManager.class);
boolean supportsMicrophoneToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.MICROPHONE);
boolean supportsCameraToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.CAMERA);