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 che hanno come target Android 11 o versioni successive e le app potrebbero dover aggiornare le autorizzazioni che dichiarano se utilizzano la finestra di avviso del 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 a posizione, microfono o fotocamera, la finestra di dialogo delle autorizzazioni rivolta all'utente contiene un'opzione chiamata Solo questa volta. Se l'utente seleziona questa opzione nella finestra di dialogo, alla tua app viene concessa un'autorizzazione temporanea una tantum.
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 aveva concesso alla tua app. Questa azione ha lo stesso effetto che si verifica quando l'utente visualizza un'autorizzazione nelle impostazioni di sistema e modifica il livello di accesso della tua app impostandolo su Nega. Se la tua app segue le best practice per richiedere le autorizzazioni in fase di runtime, non dovresti dover apportare modifiche alla tua app. Infatti, man mano che l'utente interagisce con le funzionalità della tua app, devi verificare che le funzionalità dispongano delle autorizzazioni necessarie.
Scopri di più su come il sistema reimposta automaticamente le autorizzazioni delle app inutilizzate.
Visibilità della finestra di autorizzazione
A partire da Android 11, se l'utente tocca Nega per un'autorizzazione specifica più di una volta durante il periodo di installazione dell'app su un dispositivo, non visualizza la finestra di dialogo delle autorizzazioni di sistema se la tua app richiede di nuovo l'autorizzazione. L'azione dell'utente implica "non chiedere 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 definitivamente 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 esaminare.
L'output del comando contiene sezioni simili a queste:
... 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 contrassegnate da USER_SET
.
Le autorizzazioni che sono state rifiutate definitivamente selezionando Rifiuta due volte sono
contrassegnate da USER_FIXED
.
Durante i test, potresti voler reimpostare questi flag per assicurarti che i tester non si sorprendano 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 app per Android, visita la pagina di riferimento dell'API Permissions.
Scopri di più su come gestire il rifiuto delle autorizzazioni nella tua app.
Modifiche alla finestra di avviso del sistema
Android 11 introduce diverse modifiche al modo in cui le app ottengono l'autorizzazione
SYSTEM_ALERT_WINDOW
. Le modifiche hanno lo scopo di proteggere gli utenti rendendo la concessione
dell'autorizzazione più intenzionale.
A determinate app viene concessa automaticamente l'autorizzazione SYSTEM_ALERT_WINDOW su richiesta
A determinate classi di app viene concessa automaticamente l'autorizzazione SYSTEM_ALERT_WINDOW
su richiesta:
A qualsiasi app che dispone di
ROLE_CALL_SCREENING
e richiedeSYSTEM_ALERT_WINDOW
viene concessa automaticamente l'autorizzazione. Se l'app perdeROLE_CALL_SCREENING
, perde l'autorizzazione.Qualsiasi app che acquisisce lo schermo tramite un
MediaProjection
e richiedeSYSTEM_ALERT_WINDOW
riceve automaticamente l'autorizzazione a meno che l'utente non l'abbia negata esplicitamente all'app. Quando l'app interrompe l'acquisizione dello schermo, perde l'autorizzazione. Questo caso d'uso è principalmente destinato alle app di live streaming di giochi.
Queste app non devono inviare
ACTION_MANAGE_OVERLAY_PERMISSION
per ottenere l'autorizzazione SYSTEM_ALERT_WINDOW
; le app 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,
ACTION_MANAGE_OVERLAY_PERMISSION
gli intent portano sempre l'utente alla schermata Impostazioni di primo livello, dove
l'utente può concedere o revocare le
autorizzazioni 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, che portava 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 invece prima selezionare l'app a cui vuole concedere o revocare l'autorizzazione. Questa modifica ha lo scopo di proteggere gli utenti
rendendo la concessione dell'autorizzazione più intenzionale.
Numeri di telefono
Android 11 modifica l'autorizzazione relativa al telefono utilizzata dall'app per leggere i numeri di telefono.
Se la tua app ha come target Android 11 o versioni successive e deve accedere alle
API per i numeri di telefono mostrate nell'elenco seguente, devi richiedere l'autorizzazione
READ_PHONE_NUMBERS
anziché l'autorizzazione READ_PHONE_STATE
.
- Il metodo
getLine1Number()
sia nella classeTelephonyManager
che nella classeTelecomManager
. - Il metodo
getMsisdn()
non supportato nella classeTelephonyManager
.
Se la tua app dichiara READ_PHONE_STATE
per chiamare metodi diversi da quelli
nell'elenco precedente, puoi continuare a richiedere READ_PHONE_STATE
in tutte
le versioni di Android. Se utilizzi l'autorizzazione READ_PHONE_STATE
solo per i metodi
nell'elenco precedente, aggiorna il file manifest nel seguente modo:
- Modifica la dichiarazione di
READ_PHONE_STATE
in modo che la tua app utilizzi l'autorizzazione solo su Android 10 (livello API 29) e versioni precedenti. - Aggiungi l'autorizzazione
READ_PHONE_NUMBERS
.
Il seguente snippet di dichiarazione del file manifest mostra 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 ulteriori informazioni sulle modifiche alle autorizzazioni in Android 11, consulta i seguenti materiali:
Video
Sviluppare con le ultime modifiche alla privacy in Android 11