Aggiornamenti delle autorizzazioni in Android 11

Android 11 offre agli utenti la possibilità di specificare autorizzazioni più granulari per posizione, microfono e fotocamera. Inoltre, il sistema reimposta le autorizzazioni delle app inutilizzate destinate ad Android 11 o versioni successive e le app potrebbero dover aggiornare le autorizzazioni dichiarate se usano la finestra di avviso di sistema o leggono informazioni relative ai numeri di telefono.

Autorizzazioni una tantum

A partire da Android 11, ogni volta che la tua app richiede un'autorizzazione relativa alla posizione, al microfono o alla fotocamera, la finestra di dialogo delle autorizzazioni rivolta agli utenti contiene un'opzione denominata Solo questa volta. Se l'utente seleziona questa opzione nella finestra di dialogo, alla tua app viene concessa un'autorizzazione una tantum temporanea.

Scopri di più su come il sistema gestisce le autorizzazioni una tantum.

Reimposta automaticamente le autorizzazioni delle app inutilizzate

Se la tua app ha come target Android 11 o versioni successive e non viene utilizzata per alcuni mesi, il sistema protegge i dati utente reimpostando automaticamente le autorizzazioni di runtime sensibili che l'utente ha concesso all'app. Questa azione ha lo stesso effetto che l'utente visualizzasse un'autorizzazione nelle impostazioni di sistema e modificasse il livello di accesso dell'app in Nega. Se la tua app segue le best practice per richiedere autorizzazioni in fase di runtime, non devi apportare alcuna modifica all'app perché, poiché l'utente interagisce con le funzionalità della tua app, devi verificare che queste abbiano le autorizzazioni necessarie.

Scopri di più su come il sistema reimposta automaticamente le autorizzazioni delle app inutilizzate.

Visibilità finestra di dialogo delle autorizzazioni

A partire da Android 11, se l'utente tocca Rifiuta per un'autorizzazione specifica più di una volta durante il ciclo di vita dell'app su un dispositivo, non vedrà la finestra di dialogo delle autorizzazioni di sistema se l'app richiede di nuovo l'autorizzazione. L'azione dell'utente implica "Non chiedermelo più". Nelle versioni precedenti, gli utenti vedevano la finestra di dialogo delle autorizzazioni di sistema ogni volta che la tua app richiedeva un'autorizzazione, a meno che l'utente non avesse selezionato in precedenza una casella di controllo o un'opzione "Non chiedere più". Questa modifica del comportamento in Android 11 scoraggia le richieste ripetute di autorizzazioni che gli utenti hanno scelto di negare.

Per identificare se a un'app sono state negate in modo permanente le autorizzazioni (a scopo di debug e test), utilizza il seguente comando:

adb shell dumpsys package PACKAGE_NAME

dove PACKAGE_NAME è il nome del pacchetto da ispezionare.

L'output del comando contiene sezioni che hanno il seguente aspetto:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

Le autorizzazioni negate una volta dall'utente vengono segnalate da USER_SET. Le autorizzazioni che sono state negate in modo permanente selezionando Rifiuta due volte vengono contrassegnate da USER_FIXED.

Durante il test, ti consigliamo di reimpostare questi flag per assicurarti che i tester non siano sorpresi quando la finestra di dialogo della richiesta non viene visualizzata. Per farlo, utilizza il comando:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME è il nome dell'autorizzazione che vuoi reimpostare. Per visualizzare un elenco completo delle autorizzazioni per le app per Android, visita la pagina di riferimento dell'API per le autorizzazioni.

Scopri di più su come gestire il rifiuto delle autorizzazioni nella tua app.

Modifiche alla finestra di avviso di sistema

Android 11 apporta diverse modifiche al modo in cui alle app viene concessa l'autorizzazione SYSTEM_ALERT_WINDOW. Le modifiche hanno lo scopo di proteggere gli utenti rendendo più intenzionale la concessione dell'autorizzazione.

Ad alcune app viene concessa automaticamente l'autorizzazione SYSTEM_ALERT_WINDOWS su richiesta

Ad alcune classi di app viene concessa automaticamente l'autorizzazione SYSTEM_ALERT_WINDOW su richiesta:

  • L'autorizzazione viene concessa automaticamente a qualsiasi app che ha ROLE_CALL_SCREENING e richiede SYSTEM_ALERT_WINDOW. Se l'app perde ROLE_CALL_SCREENING, perde l'autorizzazione.

  • A qualsiasi app che acquisisce la schermata tramite un elemento MediaProjection e richiede l'autorizzazione SYSTEM_ALERT_WINDOW viene concessa automaticamente l'autorizzazione, a meno che l'utente non abbia negato in modo esplicito l'autorizzazione all'app. Quando l'app interrompe l'acquisizione della schermata, perde l'autorizzazione. Questo caso d'uso è pensato principalmente per le app di live streaming di giochi.

Queste app non devono necessariamente inviare ACTION_MANAGE_OVERLAY_PERMISSION per ottenere l'autorizzazione SYSTEM_ALERT_WINDOW; possono semplicemente richiedere SYSTEM_ALERT_WINDOW direttamente.

Gli intent MANAGE_OVERLAY_PERMISSION portano sempre l'utente alla schermata delle autorizzazioni di sistema

A partire da Android 11, gli intent di ACTION_MANAGE_OVERLAY_PERMISSION portano sempre l'utente alla schermata di primo livello Impostazioni, dove l'utente può concedere o revocare le autorizzazioni di SYSTEM_ALERT_WINDOW per le app. Tutti i dati package: nell'intent vengono ignorati.

Nelle versioni precedenti di Android, l'intent ACTION_MANAGE_OVERLAY_PERMISSION poteva specificare un pacchetto, indirizzando l'utente a una schermata specifica dell'app per la gestione dell'autorizzazione. Questa funzionalità non è supportata a partire da Android 11. L'utente deve prima selezionare l'app per cui vuole concedere o revocare l'autorizzazione. Lo scopo di questa modifica è proteggere gli utenti, rendendo più intenzionale la concessione dell'autorizzazione.

Numeri di telefono.

Android 11 modifica l'autorizzazione relativa al telefono usata dalla tua app per leggere i numeri di telefono.

Se la tua app ha come target Android 11 o versioni successive e deve accedere alle API dei numeri di telefono mostrate nell'elenco seguente, devi richiedere l'autorizzazione READ_PHONE_NUMBERS anziché l'autorizzazione READ_PHONE_STATE.

Se la tua app dichiara che READ_PHONE_STATE deve chiamare metodi diversi da quelli nell'elenco precedente, puoi continuare a richiedere READ_PHONE_STATE in tutte le versioni di Android. Tuttavia, se usi l'autorizzazione READ_PHONE_STATE solo per i metodi nell'elenco precedente, aggiorna il file manifest come segue:

  1. Modifica la tua dichiarazione di READ_PHONE_STATE in modo che la tua app utilizzi l'autorizzazione solo su Android 10 (livello API 29) e versioni precedenti.
  2. Aggiungi l'autorizzazione READ_PHONE_NUMBERS.

Il seguente snippet di dichiarazione del file manifest dimostra questa procedura:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

Risorse aggiuntive

Per saperne di più sulle modifiche alle autorizzazioni in Android 11, consulta i seguenti materiali:

Video

Sviluppare con le ultime modifiche relative alla privacy di Android 11