Android 10 (livello API 29) introduce una serie di funzionalità e modifiche del comportamento per proteggere meglio la privacy degli utenti. Queste modifiche estendono la trasparenza e il controllo che gli utenti hanno sui propri dati e sulle funzionalità che concedono alle app. Queste funzionalità potrebbero comportare un comportamento diverso di dati o comportamenti specifici da cui dipende la tua app rispetto alle versioni precedenti della piattaforma. Gli impatti sulla tua app dovrebbero essere minimi se l'app segue le best practice attuali per la gestione dei dati utente.
Questa pagina elenca un riepilogo di ogni modifica.
Modifiche principali
Questa sezione include le principali modifiche apportate ad Android 10 relative alla privacy.
Accesso allo spazio di archiviazione esterno limitato a file e contenuti multimediali dell'app
Per impostazione predefinita, alle app che hanno come target Android 10 e versioni successive viene concesso l'accesso con ambito all'archivio esterno o all'archivio con ambito. Queste app possono visualizzare i seguenti tipi di file all'interno di un dispositivo di archiviazione esterno senza dover richiedere autorizzazioni utente relative all'archiviazione:
- File nella directory specifica dell'app, a cui si accede utilizzando
getExternalFilesDir()
. - Foto, video e clip audio creati dall'app a partire dall'archivio multimediale.
Per saperne di più sullo spazio di archiviazione isolato, nonché su come condividere, accedere e modificare i file salvati su dispositivi di archiviazione esterni, consulta le guide su come gestire i file nello spazio di archiviazione esterno e accedere e modificare i file multimediali.
L'accesso alla posizione del dispositivo in background richiede l'autorizzazione
Per supportare il controllo aggiuntivo che gli utenti hanno sull'accesso di un'app alle
informazioni sulla posizione, Android 10 introduce l'autorizzazione
ACCESS_BACKGROUND_LOCATION
.
A differenza delle autorizzazioni
ACCESS_FINE_LOCATION
e
ACCESS_COARSE_LOCATION
, l'autorizzazione ACCESS_BACKGROUND_LOCATION
influisce solo sull'accesso
alla posizione di un'app quando viene eseguita in background. Un'app viene considerata
in grado di accedere alla posizione in background a meno che non sia soddisfatta una delle seguenti condizioni:
- È visibile un'attività appartenente all'app.
L'app esegue un servizio in primo piano che ha dichiarato un tipo di servizio in primo piano di
location
.Per dichiarare il tipo di servizio in primo piano per un servizio nella tua app, imposta
targetSdkVersion
ocompileSdkVersion
della tua app su29
o versioni successive. Scopri di più su come i servizi in primo piano possono continuare le azioni iniziate dall'utente che richiedono l'accesso alla posizione.
Se la tua app crea e monitora recinti virtuali e
ha come target Android 10 (livello API 29) o versioni successive, devi dichiarare l'autorizzazione
ACCESS_BACKGROUND_LOCATION
.
Accesso concesso automaticamente quando scegli come target Android 9 o versioni precedenti
Se la tua app viene eseguita su Android 10 o versioni successive, ma ha come target Android 9 (livello API 28) o versioni precedenti, la piattaforma applica il seguente comportamento:
- Se la tua app dichiara un elemento
<uses-permission>
perACCESS_FINE_LOCATION
oACCESS_COARSE_LOCATION
, il sistema aggiunge automaticamente un elemento<uses-permission>
perACCESS_BACKGROUND_LOCATION
durante l'installazione. - Se la tua app richiede
ACCESS_FINE_LOCATION
oACCESS_COARSE_LOCATION
, il sistema aggiunge automaticamenteACCESS_BACKGROUND_LOCATION
alla richiesta.
Accesso dopo l'aggiornamento del dispositivo ad Android 10
Se un utente concede alla tua app l'accesso alla posizione del dispositivo, tramite
ACCESS_COARSE_LOCATION
o
ACCESS_FINE_LOCATION
e poi esegue l'upgrade del dispositivo da Android 9 ad Android 10,
il sistema aggiorna automaticamente l'insieme di autorizzazioni basate sulla posizione concesse
alla tua app. L'insieme di autorizzazioni che la tua app riceve dopo l'upgrade
dipende dalla versione SDK di destinazione e dalle autorizzazioni definite, come mostrato nella
tabella seguente:
Tabella 1. Modifiche allo stato dell'autorizzazione di accesso alla posizione dopo l'upgrade del dispositivo ad Android 10
Versione della piattaforma di destinazione | Autorizzazione approssimativa o precisa concessa? |
Autorizzazione in background definita nel manifest? |
Stato dell'autorizzazione predefinito aggiornato |
---|---|---|---|
Android 10 | Sì | Sì | Accesso in primo piano e in background |
Android 10 | Sì | No | Solo accesso in primo piano |
Android 10 | No | (Ignorato dal sistema) | Nessun accesso |
Android 9 o versioni precedenti | Sì | Aggiunti automaticamente dal sistema al momento dell'upgrade del dispositivo | Accesso in primo piano e in background |
Android 9 o versioni precedenti | No | (Ignorato dal sistema) | Nessun accesso |
Tieni presente che l'utente può modificare questo livello di accesso anche dopo che il sistema aggiorna automaticamente l'accesso dell'app alla posizione del dispositivo. Ad esempio, l'utente potrebbe ridurre l'accesso dell'app solo al primo piano o revocarlo completamente. Prima di tentare di accedere alla posizione del dispositivo, in particolare all'interno di un servizio in primo piano, l'app deve verificare se l'utente consente ancora all'app di ricevere queste informazioni sulla posizione.
Accesso revocato durante l'aggiornamento del livello API target sui dispositivi Android 10
Considera il caso in cui la tua app sia già installata su un dispositivo con
Android 10. Se aggiorni l'app in modo che abbia come target
Android 10 in questa situazione, il dispositivo revoca l'autorizzazione
ACCESS_BACKGROUND_LOCATION
.
Per ulteriori informazioni su come recuperare la posizione del dispositivo mentre l'app è in background, consulta la guida alla ricezione di aggiornamenti periodici della posizione.
Limitazioni relative all'avvio di attività in background
A partire da Android 10, il sistema impone limitazioni all'avvio di attività in background. Questa modifica del comportamento contribuisce a ridurre al minimo le interruzioni per l'utente e a mantenere un maggiore controllo su ciò che viene mostrato sullo schermo. Se la tua app avvia attività come risultato diretto dell'interazione dell'utente, molto probabilmente non è interessata da queste limitazioni.
Per scoprire di più sull'alternativa consigliata per avviare attività in background, consulta la guida su come avvisare gli utenti di eventi sensibili al tempo nella tua app.
Identificatori e dati
Questa sezione elenca le modifiche specifiche per l'utilizzo di identificatori e dati dei dispositivi.
Rimozione dell'affinità dei contatti
A partire da Android 10, la piattaforma non tiene traccia delle informazioni sull'affinità dei contatti. Di conseguenza, se la tua app esegue una ricerca nei contatti dell'utente, i risultati non vengono ordinati in base alla frequenza di interazione.
La guida relativa a ContactsProvider
contiene un avviso che descrive i campi e i metodi specifici che sono obsoleti su tutti i dispositivi a partire da Android 10.
Selezione casuale dell'indirizzo MAC
Sui dispositivi con Android 10 o versioni successive, il sistema trasmette indirizzi MAC randomizzati per impostazione predefinita.
Se la tua app gestisce un caso d'uso aziendale, la piattaforma fornisce API per diverse operazioni relative agli indirizzi MAC:
- Ottenere l'indirizzo MAC casuale:le app del proprietario del dispositivo e del proprietario del profilo
possono recuperare l'indirizzo MAC casuale assegnato a una rete specifica
chiamando
getRandomizedMacAddress()
. - Ottenere l'indirizzo MAC di fabbrica effettivo:le app proprietarie del dispositivo possono recuperare l'indirizzo MAC hardware effettivo di un dispositivo chiamando
getWifiMacAddress()
. Questo metodo è utile per monitorare flotte di dispositivi.
Limitazione dell'accesso al file system /proc/net
Sui dispositivi con Android 10 o versioni successive, le app non possono accedere a
/proc/net
, che include informazioni sullo stato della rete di un dispositivo. Le app
che devono accedere a queste informazioni, come le VPN, devono utilizzare la classe
NetworkStatsManager
o
ConnectivityManager
.
Limitazione degli identificatori di dispositivi non reimpostabili
A partire da Android 10, le app devono disporre dell'autorizzazione
READ_PRIVILEGED_PHONE_STATE
con privilegi per accedere agli
identificatori non ripristinabili del dispositivo, che includono sia l'IMEI che il numero di serie.
I metodi interessati includono:
Build
TelephonyManager
Se la tua app non dispone dell'autorizzazione e provi comunque a richiedere informazioni sugli identificatori non reimpostabili, la risposta della piattaforma varia in base alla versione dell'SDK di destinazione:
- Se la tua app ha come target Android 10 o versioni successive, si verifica un
SecurityException
. - Se la tua app ha come target Android 9 (livello API 28) o versioni precedenti, il metodo restituisce
null
o dati segnaposto se l'app dispone dell'autorizzazioneREAD_PHONE_STATE
. In caso contrario, si verifica unSecurityException
.
Molti casi d'uso non richiedono identificatori di dispositivi non reimpostabili. Ad esempio, se la tua app utilizza identificatori di dispositivo non reimpostabili per il monitoraggio degli annunci o l'analisi degli utenti, utilizza un ID pubblicità Android per questi casi d'uso specifici. Per saperne di più, consulta le best practice per gli identificatori univoci.
Accesso limitato ai dati degli appunti
A meno che la tua app non sia l'editor del metodo di input (IME) predefinito o non sia l'app attualmente selezionata, non può accedere ai dati degli appunti su Android 10 o versioni successive.
Protezione del numero di serie del dispositivo USB
Se la tua app ha come target Android 10 o versioni successive, non può leggere il numero di serie finché l'utente non ha concesso all'app l'autorizzazione ad accedere al dispositivo o all'accessorio USB.
Per scoprire di più sull'utilizzo dei dispositivi USB, consulta la guida su come configurare gli host USB.
Fotocamera e connettività
Questa sezione elenca le modifiche specifiche per i metadati della videocamera e le API di connettività.
Limitazione dell'accesso ai dettagli e ai metadati della videocamera
Android 10 modifica l'ampiezza delle informazioni restituite
per impostazione predefinita dal metodo
getCameraCharacteristics()
. In particolare, la tua app deve disporre dell'autorizzazione
CAMERA
per accedere ai metadati potenzialmente specifici del dispositivo inclusi nel valore restituito di questo metodo.
Per saperne di più su queste modifiche, consulta la sezione relativa ai campi della videocamera che richiedono l'autorizzazione.
Limitazione dell'attivazione e della disattivazione del Wi-Fi
Le app che hanno come target Android 10 o versioni successive non possono attivare o disattivare
il Wi-Fi. Il metodo
WifiManager.setWifiEnabled()
restituisce sempre false
.
Se devi chiedere agli utenti di attivare e disattivare il Wi-Fi, utilizza un pannello delle impostazioni.
Limitazioni all'accesso diretto alle reti Wi-Fi configurate
Per proteggere la privacy degli utenti, la configurazione manuale dell'elenco delle reti Wi-Fi è limitata alle app di sistema e ai controller delle norme relative ai dispositivi (DPC). Un determinato DPC può essere il proprietario del dispositivo o il proprietario del profilo.
Se la tua app ha come target Android 10 o versioni successive e non è un'app di sistema o un DPC, i seguenti metodi non restituiscono dati utili:
Il metodo
getConfiguredNetworks()
restituisce sempre un elenco vuoto.Ogni metodo di operazione di rete che restituisce un valore intero,
addNetwork()
eupdateNetwork()
, restituisce sempre -1.Ogni operazione di rete che restituisce un valore booleano, ovvero
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
edisconnect()
, restituisce semprefalse
.
Se la tua app deve connettersi a reti Wi-Fi, utilizza i seguenti metodi alternativi:
- Per attivare una connessione locale istantanea a una rete Wi-Fi, utilizza
WifiNetworkSpecifier
in un oggettoNetworkRequest
standard. - Per aggiungere reti Wi-Fi da prendere in considerazione per fornire l'accesso a internet all'utente, utilizza gli oggetti
WifiNetworkSuggestion
. Puoi aggiungere e rimuovere le reti visualizzate nella finestra di dialogo di selezione della rete di connessione automatica chiamandoaddNetworkSuggestions()
eremoveNetworkSuggestions()
, rispettivamente. Questi metodi non richiedono autorizzazioni di accesso alla posizione.
Alcune API di telefonia, Bluetooth e Wi-Fi richiedono l'autorizzazione di accesso alla posizione esatta
Se la tua app ha come target Android 10 o versioni successive, deve disporre dell'autorizzazione
ACCESS_FINE_LOCATION
per utilizzare diversi metodi all'interno delle API Wi-Fi, Wi-Fi Aware
o Bluetooth. Nelle sezioni seguenti sono elencate le classi e i metodi interessati.
Telefonia
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Wi-Fi
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
Autorizzazioni
Questa sezione descrive gli aggiornamenti al modello di autorizzazioni Android.
Accesso limitato ai contenuti dello schermo
Per proteggere i contenuti dello schermo degli utenti, Android 10 impedisce l'accesso
silenzioso ai contenuti dello schermo del dispositivo modificando l'ambito delle
autorizzazioni READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
e CAPTURE_SECURE_VIDEO_OUTPUT
. A partire da Android 10, queste autorizzazioni sono
signature-access
only.
Le app che devono accedere ai contenuti dello schermo del dispositivo devono utilizzare l'API
MediaProjection
, che mostra una richiesta che chiede all'utente di fornire il consenso.
Controllo delle autorizzazioni rivolte agli utenti nelle app legacy
Se la tua app ha come target Android 5.1 (livello API 22) o versioni precedenti, gli utenti vedranno una schermata delle autorizzazioni quando utilizzano la tua app per la prima volta su un dispositivo con Android 10 o versioni successive, come mostrato nella Figura 1. Questa schermata offre agli utenti l'opportunità di revocare l'accesso alle autorizzazioni che il sistema ha concesso in precedenza alla tua app al momento dell'installazione.
Riconoscimento dell'attività fisica
Android 10 introduce l'autorizzazione di runtime
android.permission.ACTIVITY_RECOGNITION
per le app che devono rilevare il numero di passi dell'utente o
classificare la sua attività fisica, come camminare, andare in bicicletta o spostarsi in
un veicolo. Questa funzionalità è progettata per consentire agli utenti di visualizzare in Impostazioni come vengono utilizzati i dati dei sensori del dispositivo.
Alcune librerie all'interno di Google Play Services, come l'API Activity Recognition e l'API Google Fit, non forniscono risultati a meno che l'utente non abbia concesso questa autorizzazione alla tua app.
Gli unici sensori integrati sul dispositivo che richiedono di dichiarare questa autorizzazione sono il contapassi e i sensori rilevatore di passi.
Se la tua app ha come target Android 9 (livello API 28) o versioni precedenti, il sistema concede automaticamente
l'autorizzazione android.permission.ACTIVITY_RECOGNITION
alla tua app, se necessario,
se la tua app soddisfa ciascuna delle seguenti condizioni:
- Il file manifest include l'autorizzazione
com.google.android.gms.permission.ACTIVITY_RECOGNITION
. - Il file manifest non include l'autorizzazione
android.permission.ACTIVITY_RECOGNITION
.
Se il sistema concede automaticamente l'autorizzazione android.permission.ACTIVITY_RECOGNITION
, la tua app la mantiene dopo l'aggiornamento per il targeting di Android 10. Tuttavia, l'utente può revocare questa autorizzazione in qualsiasi momento nelle impostazioni di sistema.
Gruppi di autorizzazioni rimossi dalla UI
A partire da Android 10, le app non possono cercare come sono raggruppate le autorizzazioni nell'interfaccia utente.