Android 10 (livello API 29) introduce una serie di funzionalità e modifiche al 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 su cui si basa la tua app potrebbero comportarsi in modo diverso rispetto alle versioni precedenti della piattaforma. L'impatto sulla tua app dovrebbe essere minimo se 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 modifiche principali di 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 accesso con ambito allo spazio di archiviazione esterno o archiviazione con ambito. Queste app possono vedere i seguenti tipi di file all'interno di un dispositivo di archiviazione esterno senza dover richiedere le autorizzazioni utente relative allo spazio di archiviazione:
- File nella directory specifica dell'app, a cui si accede utilizzando
getExternalFilesDir()
. - Foto, video e clip audio creati dall'app dal media store.
Per ulteriori informazioni sull'archiviazione con ambito e su come condividere, accedere e modificare i file salvati su dispositivi di archiviazione esterni, consulta le guide su come gestire i file in un'unità di archiviazione esterna 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 ai dati 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 accesso 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 di
location
.Per dichiarare il tipo di servizio in primo piano per un servizio nella tua app, imposta
targetSdkVersion
ocompileSdkVersion
dell'app su29
o versioni successive. Scopri di più su come i servizi in primo piano possono continuare le azioni avviate 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 per Android 9 o versioni precedenti
Se la tua app funziona 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 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
), quindi 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 dell'SDK di destinazione e dalle autorizzazioni definite, come mostrato nella tabella seguente:
Versione piattaforma di destinazione | Autorizzazione approssimativa o precisa concessa? |
L'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 | 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 ha aggiornato automaticamente l'accesso della tua app alla posizione del dispositivo. Ad esempio, l'utente potrebbe ridurre l'accesso della tua app solo al primo piano o revocare completamente l'accesso. Prima di tentare di accedere alla posizione del dispositivo, in particolare in 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 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 quando l'app è in background, consulta la guida su come ricevere aggiornamenti periodici della posizione.
Limitazioni relative all'avvio di attività in background
A partire da Android 10, il sistema applica limitazioni all'avvio di attività in background. Questa modifica del comportamento contribuisce a ridurre al minimo le interruzioni per l'utente e gli consente di avere 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 le attività in background, consulta la guida su come avvisare gli utenti di eventi urgenti 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 sui contatti dell'utente, i risultati non vengono ordinati in base alla frequenza di interazione.
La guida su ContactsProvider
contiene una nota che descrive i metodi e i campi 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 di proprietà del dispositivo e le app di proprietà del profilo possono recuperare l'indirizzo MAC casuale assegnato a una rete specifica chiamando
getRandomizedMacAddress()
. - Ottenere l'indirizzo MAC di fabbrica effettivo: le app di proprietà del dispositivo possono recuperare l'indirizzo MAC hardware effettivo di un dispositivo chiamando
getWifiMacAddress()
. Questo metodo è utile per monitorare flotte di dispositivi.
Limitazione di accesso al file system /proc/net
Sui dispositivi con Android 10 o versioni successive, le app non possono accedere
/proc/net
, che include informazioni sullo stato della rete di un dispositivo. Le app
che richiedono l'accesso a queste informazioni, come le VPN, devono utilizzare la classe
NetworkStatsManager
o
ConnectivityManager
.
Limitazione per gli identificatori di dispositivi non reimpostabili
A partire da Android 10, le app devono disporre dell'READ_PRIVILEGED_PHONE_STATE
autorizzazione privilegiata per accedere agli identificatori non reimpostabili del dispositivo, tra cui IMEI e numero di serie.
I metodi interessati sono i seguenti:
Build
TelephonyManager
Se la tua app non dispone dell'autorizzazione e provi comunque a chiedere 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 i 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 di dispositivi non reimpostabili. Ad esempio, se la tua app utilizza identificatori dei dispositivi non reimpostabili per il monitoraggio degli annunci o l'analisi degli utenti, utilizza invece un ID pubblicità Android per questi 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 l'app non sia l'editor di metodi di inserimento (IME) predefinito o l'app attualmente attiva, non può accedere ai dati della clipboard 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 le API di connettività e dei metadati della videocamera.
Limitazione dell'accesso ai dettagli e ai metadati della fotocamera
Android 10 modifica l'ampiezza delle informazioni restituite per impostazione predefinita dal metodo getCameraCharacteristics()
. In particolare, l'app deve disporre dell'autorizzazione
CAMERA
per accedere ai metadati potenzialmente specifici del dispositivo inclusi nel valore di ritorno di questo metodo.
Per saperne di più su queste modifiche, consulta la sezione sui campi della videocamera che richiedono l'autorizzazione.
Limitazione per l'attivazione e la 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 di impostazioni.
Limitazioni relative 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 dei criteri del dispositivo (DPC). Un determinato amministratore dispositivo 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. - Utilizza gli oggetti
WifiNetworkSuggestion
se vuoi aggiungere reti Wi-Fi da considerare per fornire l'accesso a internet all'utente. Puoi aggiungere e rimuovere le reti che vengono visualizzate nella finestra di dialogo per la selezione automatica della rete chiamando rispettivamente i pulsantiaddNetworkSuggestions()
eremoveNetworkSuggestions()
. Questi metodi non richiedono autorizzazioni di accesso alla posizione.
Alcune API per 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 sezioni seguenti elencano 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 di 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 solo di accesso con firma.
Le app che devono accedere ai contenuti dello schermo del dispositivo devono utilizzare l'API
MediaProjection
, che mostra una richiesta 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 visualizzano 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 la possibilità 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 l'attività fisica dell'utente, ad esempio camminare, andare in bicicletta o spostarsi su un veicolo. Questo è progettato per offrire agli utenti la visibilità di 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 all'app.
Gli unici sensori integrati nel dispositivo che richiedono di dichiarare questa autorizzazione sono i sensori del contenitore di passi e del rilevatore di passi.
Se la tua app ha come target Android 9 (livello API 28) o versioni precedenti, il sistema concede automaticamente all'app l'autorizzazione android.permission.ACTIVITY_RECOGNITION
, se necessario, se l'app soddisfa tutte le 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 automatico concede l'autorizzazione android.permission.ACTIVITY_RECOGNITION
, la tua app la mantiene dopo l'aggiornamento per Android 10 come target. Tuttavia, l'utente può revocare questa autorizzazione in qualsiasi momento nelle impostazioni di sistema.
Gruppi di autorizzazioni rimossi dall'interfaccia utente
A partire da Android 10, le app non possono controllare in che modo le autorizzazioni sono agrupate nell'interfaccia utente.