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 loro dati e sulle funzionalità che offrono alle app. Queste funzionalità potrebbero indicare che comportamenti o dati specifici a cui si basa la tua app possono comportarsi in modo diverso rispetto alle versioni precedenti della piattaforma. L'impatto sulla tua app dovrebbe essere minimo se quest'ultima rispetta le best practice attuali per la gestione dei dati utente.
In questa pagina viene riportato un riepilogo di ogni modifica.
Modifiche principali
Questa sezione include le modifiche principali di Android 10 relative alla privacy.
Accesso allo spazio di archiviazione esterno limitato all'ambito di file di app e contenuti multimediali
Per impostazione predefinita, alle app destinate ad Android 10 e versioni successive viene concesso accesso con ambito a unità di archiviazione esterna o archiviazione con ambito. Queste app possono accedere ai seguenti tipi di file all'interno di un dispositivo di archiviazione esterno senza dover richiedere autorizzazioni utente correlate allo spazio di archiviazione:
- File nella directory specifica dell'app, accessibile tramite
getExternalFilesDir()
. - Foto, video e clip audio creati dall'app dal media store.
Per scoprire di più sull'archiviazione mirata e su come condividere, accedere e modificare i file salvati su dispositivi di archiviazione esterni, consulta le guide su come gestire i file nella memoria esterna e accedere ai file multimediali e modificarli.
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 sull'accesso alla posizione di un'app solo quando viene eseguita in background. Un'app viene considerata che accede alla posizione in background, a meno che non venga 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 pari a
location
.Per dichiarare il tipo di servizio in primo piano per un servizio nella tua app, imposta il valore
targetSdkVersion
ocompileSdkVersion
dell'app su29
o un valore superiore. Scopri di più su come i servizi in primo piano possono continuare con le azioni avviate dall'utente che richiedono l'accesso alla posizione.
Se la tua app crea e monitora i 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.
Accedi quando viene eseguito l'upgrade del dispositivo ad Android 10
Se un utente concede alla tua app l'accesso alla posizione del dispositivo (ACCESS_COARSE_LOCATION
o ACCESS_FINE_LOCATION
) e poi esegui 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 ricevute dall'app dopo l'upgrade dipende dalla versione dell'SDK di destinazione e dalle autorizzazioni definite, come mostrato nella seguente tabella:
Versione piattaforma di destinazione | È stata concessa l'autorizzazione generica o specifica? |
Autorizzazione in background definita nel file manifest? |
Stato di autorizzazione predefinito aggiornato |
---|---|---|---|
Android 10 | Sì | Sì | Accesso in primo piano e in background |
Android 10 | Sì | No | Accesso solo in primo piano |
Android 10 | No | (Ignorato dal sistema) | Nessun accesso |
Android 9 o versioni precedenti | Sì | Aggiunta 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 in primo piano o revocare del tutto l'accesso. Prima di tentare di accedere alla posizione del dispositivo, in particolare nell'ambito 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 è già installata su un dispositivo che esegue Android 10. Se in questa situazione aggiorni l'app in modo che abbia come target
Android 10, il dispositivo revocherà l'autorizzazione
ACCESS_BACKGROUND_LOCATION
.
Per ulteriori informazioni su come recuperare la posizione del dispositivo mentre l'app è in background, consulta la guida sulla ricezione di aggiornamenti periodici della posizione.
Limitazioni relative all'avvio di attività in background
A partire da Android 10, il sistema applica limitazioni relative all'avvio di attività in background. Questo cambiamento del comportamento consente di ridurre al minimo le interruzioni per l'utente e di mantenere un maggiore controllo su ciò che viene mostrato sullo schermo. Se la tua app avvia le attività come risultato diretto dell'interazione dell'utente, è molto probabile che l'app non sia interessata da queste limitazioni.
Per scoprire di più sull'alternativa consigliata all'avvio di attività in background, consulta la guida su come avvisare gli utenti in caso di eventi sensibili al fattore tempo nella tua app.
Identificatori e dati
In questa sezione sono elencate le modifiche specifiche relative all'uso dei dati e degli identificatori 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 l'app esegue una ricerca nei contatti dell'utente, i risultati non vengono ordinati in base alla frequenza di interazione.
La guida su ContactsProvider
contiene una notifica che descrive i campi e i metodi obsoleti su tutti i dispositivi che iniziano in Android 10.
Randomizzazione degli indirizzi MAC
Sui dispositivi con Android 10 o versioni successive, il sistema trasmette gli indirizzi MAC casuali per impostazione predefinita.
Se l'app gestisce un caso d'uso aziendale, la piattaforma fornisce API per diverse operazioni relative agli indirizzi MAC:
- Ottieni un indirizzo MAC casuale: le app del proprietario del dispositivo e le app 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 gruppi di dispositivi.
Limitazione di accesso al file system /proc/net
Sui dispositivi con Android 10 o versioni successive, le app non possono accedere a
/proc/net
, incluse le informazioni sullo stato della rete di un dispositivo. Le app
che devono accedere a queste informazioni, ad esempio le VPN, dovrebbero utilizzare la classe
NetworkStatsManager
o
ConnectivityManager
.
Limitazione degli identificatori dei dispositivi non reimpostabili
A partire da Android 10, le app devono disporre dell'autorizzazione privilegiata READ_PRIVILEGED_PHONE_STATE
per poter accedere agli identificatori non reimpostabili del dispositivo, che includono sia il codice IMEI sia il numero di serie.
I metodi interessati includono:
Build
TelephonyManager
Se la tua app non ha l'autorizzazione e provi comunque a chiedere informazioni sugli identificatori non reimpostabili, la risposta della piattaforma varia in base alla versione target dell'SDK:
- Se la tua app ha come target Android 10 o versioni successive, si verifica un errore
SecurityException
. - Se la tua app ha come target Android 9 (livello API 28) o versioni precedenti, il metodo restituisce dati
null
o segnaposto se l'app dispone dell'autorizzazioneREAD_PHONE_STATE
. In caso contrario, si verifica unSecurityException
.
Molti casi d'uso non richiedono identificatori dei dispositivi non reimpostabili. Ad esempio, se la tua app utilizza identificatori di dispositivi non reimpostabili per scopi di monitoraggio degli annunci o di analisi degli utenti, utilizza un ID pubblicità di Android per i casi d'uso specifici. Per scoprire 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 l'app attualmente attiva, l'app 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 concede all'app l'autorizzazione ad accedere al dispositivo o all'accessorio USB.
Per scoprire di più sull'utilizzo dei dispositivi USB, consulta la guida alla configurazione degli host USB.
Videocamera e connettività
In questa sezione sono elencate le modifiche specifiche apportate ai metadati della videocamera e alle API di connettività.
Limitazione dell'accesso ai dettagli e ai metadati della videocamera
Android 10 cambia l'ampiezza delle informazioni restituite per impostazione predefinita dal metodo
getCameraCharacteristics()
. In particolare, la tua app deve disporre dell'autorizzazione
CAMERA
per
accedere a metadati potenzialmente specifici del dispositivo inclusi nel
valore restituito di questo metodo.
Per scoprire di più su queste modifiche, consulta la sezione sui campi relativi alle videocamere che richiedono l'autorizzazione.
Limitazione dell'attivazione e della disattivazione del Wi-Fi
Le app destinate ad 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 riquadro delle impostazioni.
Limitazioni relative all'accesso diretto alle reti Wi-Fi configurate
Per proteggere la privacy degli utenti, la configurazione manuale dell'elenco di reti Wi-Fi è limitata alle app di sistema e ai controller dei criteri dei dispositivi (DPC). Un determinato DPC può essere il proprietario del dispositivo o 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 (
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 considerare 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 per la connessione automatica chiamando rispettivamenteaddNetworkSuggestions()
eremoveNetworkSuggestions()
. Questi metodi non richiedono alcuna autorizzazione di accesso alla posizione.
Alcune API di telefonia, Bluetooth e Wi-Fi richiedono l'autorizzazione di accesso alla posizione FINE
Se la tua app ha come target Android 10 o versioni successive, deve disporre dell'autorizzazione
ACCESS_FINE_LOCATION
per poter utilizzare diversi metodi all'interno delle API Wi-Fi, Wi-Fi Aware
o Bluetooth. Le classi e i metodi interessati sono elencati nelle sezioni seguenti.
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
In questa sezione vengono descritti gli aggiornamenti al modello di autorizzazioni Android.
Accesso limitato ai contenuti dello schermo
Per proteggere i contenuti sullo 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
solo di accesso per firma.
Le app che devono accedere ai contenuti dello schermo del dispositivo devono utilizzare l'API MediaProjection
, che mostra una richiesta di consenso all'utente.
Controllo delle autorizzazioni delle app precedenti rivolto agli utenti
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 per la prima volta l'app 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 aveva precedentemente concesso 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 classificarne l'attività fisica, ad esempio camminata, ciclismo o spostamento in un veicolo. Questa funzionalità è progettata per offrire agli utenti visibilità su come vengono utilizzati i dati dei sensori del dispositivo nelle Impostazioni.
Alcune librerie all'interno di Google Play Services, come l'API di riconoscimento attività 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 questa autorizzazione sono il contatore di passi e il 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 soddisfa ognuna 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 l'autorizzazione automatica di sistema concede l'autorizzazione android.permission.ACTIVITY_RECOGNITION
, la tua app la manterrà dopo l'aggiornamento dell'app in modo che abbia come target 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 il modo in cui vengono raggruppate le autorizzazioni nell'interfaccia utente.