Android 9 (livello API 28) introduce nuove funzionalità e capacità per utenti e sviluppatori. Questo documento mette in evidenza le novità per gli sviluppatori.
Per scoprire di più sulle nuove API, consulta il report sulle differenze delle API o visita il riferimento all'API Android. Inoltre, consulta Modifiche al comportamento di Android 9 per scoprire le aree in cui le modifiche alla piattaforma potrebbero influire sulle tue app.
Posizionamento indoor con RTT Wi-Fi

Android 9 aggiunge il supporto della piattaforma per il Wi-Fi IEEE 802.11-2016 noto anche come Round-Trip-Time Wi-Fi (RTT), per sfruttare al meglio del posizionamento all'interno delle app.
Sui dispositivi con Android 9 e supporto hardware, le tue app possono utilizzare le API RTT per misurare la distanza dai punti di accesso (AP) Wi-Fi compatibili con RTT nelle vicinanze. Sul dispositivo devono essere attivati i servizi di geolocalizzazione e la ricerca di reti Wi-Fi (in Impostazioni > Posizione) e la tua app deve disporre dell'autorizzazione ACCESS_FINE_LOCATION
. Il dispositivo non deve connettersi ai punti di accesso per utilizzare RTT.
Per tutelare la privacy, solo lo smartphone è in grado di determinare la distanza dal punto di accesso. I punti di accesso non dispongono di queste informazioni.
Se il dispositivo misura la distanza da 3 o più punti di accesso, puoi utilizzare un algoritmo di trilaterazione per stimare la posizione del dispositivo più adatta a queste misurazioni. Il risultato è in genere preciso entro 1-2 metri.
Con questa precisione, puoi creare nuove esperienze, come la navigazione all'interno di edifici e servizi basati sulla posizione granulari, come il controllo vocale disambiguato (ad esempio "Accendi questa luce") e le informazioni basate sulla posizione (ad esempio "Ci sono offerte speciali per questo prodotto?").
Controlla l'API WiFi RTT in uso nella App demo Android WifiRttScan.
Per ulteriori informazioni, vedi Posizione Wi-Fi: con RTT.
Supporto del ritaglio del display

Testare il ritaglio del display utilizzando l'emulatore
Android 9 offre supporto per i più recenti schermi edge-to-edge
che contengono ritagli del display per videocamere e altoparlanti. La classe
DisplayCutout
ti consente di scoprire la posizione e la forma delle aree non funzionali in cui
i contenuti non devono essere visualizzati. Per determinare l'esistenza e il posizionamento di queste aree ritagliate, utilizza il metodo getDisplayCutout()
.
Un nuovo attributo layout finestra,
layoutInDisplayCutoutMode
,
consente all'app di disporre i contenuti attorno ai ritagli del dispositivo. Puoi impostare questo attributo su uno dei seguenti valori:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Puoi simulare un ritaglio dello schermo su qualsiasi dispositivo o emulatore con Android 9 come segue:
- Attiva le opzioni sviluppatore.
- Nella schermata Opzioni sviluppatore, scorri verso il basso fino alla sezione Disegno e seleziona Simula un display con un ritaglio.
- Seleziona la dimensione del ritaglio.
Notifiche
Android 9 introduce diversi miglioramenti alle notifiche, che sono disponibile per gli sviluppatori che hanno come target il livello API 28 e versioni successive.

MessagingStyle con foto allegata.

MessagingStyle con risposte e conversazione.
Per un codice di esempio che utilizza le notifiche, incluse le funzionalità di Android 9, consulta Persone Esempio.
Esperienza di messaggistica avanzata
A partire da Android 7.0 (livello API 24), puoi aggiungere un'azione per rispondere ai messaggi o inserire altro testo direttamente da una notifica. Android 9 migliora questa funzionalità con i seguenti miglioramenti:
Supporto semplificato per i partecipanti alle conversazioni:
Person
classe è utilizzato per identificare le persone coinvolte in una conversazione, incluse le loro e URI. Molte altre API, comeaddMessage()
, ora utilizza la classePerson
anziché unaCharSequence
. La classePerson
supporta anche il pattern di progettazione Builder.Supporto delle immagini: Android 9 ora mostra le immagini nelle notifiche di Messaging sui telefoni. Puoi utilizzare
setData()
nel messaggio per visualizzare un'immagine. Il seguente snippet di codice mostra come creare unPerson
e un messaggio contenente un'immagine.
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
Salva le risposte come bozze: la tua app può recuperare le
EXTRA_REMOTE_INPUT_DRAFT
inviate dal sistema quando un utente chiude inavvertitamente una notifica di messaggistica. Puoi utilizzare questo extra per precompilare i campi di testo nell'app in modo che gli utenti possano completare la risposta.Identificare se una conversazione è di gruppo: puoi utilizzare
setGroupConversation()
per identificare intenzionalmente una conversazione come di gruppo o non di gruppo.Imposta l'azione semantica per un'intenzione: il metodo
setSemanticAction()
ti consente di assegnare un significato semantico a un'azione, ad esempio "Contrassegna come letto", "Elimina", "Rispondi" e così via.Risposta rapida: Android 9 supporta le stesse risposte suggerite disponibili in app di messaggistica. Utilizza le funzionalità di
RemoteInput.setChoices()
per fornire all'utente un array di risposte standard.
Impostazioni del canale, trasmissioni e Non disturbare
Android 8.0 ha introdotto i canali di notifica, permettendoti di creare personalizzabile dall'utente per ogni tipo di notifica che vuoi visualizzare. Android 9 semplifica le impostazioni del canale di notifica con queste modifiche:
Blocco dei gruppi di canali: ora gli utenti possono bloccare interi gruppi di canali nelle impostazioni di notifica di un'app. Puoi utilizzare lo
isBlocked()
per identificare quando un gruppo è bloccato e, di conseguenza, non inviare notifiche per i canali di quel gruppo.Inoltre, la tua app può eseguire query sulle impostazioni correnti dei gruppi di canali utilizzando il nuovo
getNotificationChannelGroup()
.Nuovi tipi di intent di trasmissione: il sistema Android ora invia intent di trasmissione quando cambia lo stato di blocco dei canali di notifica e dei gruppi di canali. L'app proprietaria del canale o del gruppo bloccato può ascoltare questi intent e reagiscono di conseguenza. Per ulteriori informazioni su queste azioni e su questi extra dell'intent, consulta l'elenco aggiornato delle costanti nella documentazione di riferimento di
NotificationManager
. Per informazioni su come reagire agli intenti di trasmissione, consulta: Annunci.NotificationManager.Policy
ha tre nuove categorie di priorità Non disturbare:PRIORITY_CATEGORY_ALARMS
assegna la priorità alle sveglie.PRIORITY_CATEGORY_MEDIA
dà la priorità ai suoni provenienti da sorgenti multimediali, come contenuti multimediali e navigazione vocale.PRIORITY_CATEGORY_SYSTEM
dà la priorità ai suoni di sistema.
NotificationManager.Policy
ha anche sette nuove costanti Non disturbare che puoi utilizzare per eliminare le interruzioni visive:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
impedisce alla notifica di avviare l'attività a schermo intero.SUPPRESSED_EFFECT_LIGHTS
blocca le spie di notifica.SUPPRESSED_EFFECT_PEEK
impedisce alle notifiche di apparire brevemente sullo schermo ("anteprima").SUPPRESSED_EFFECT_STATUS_BAR
impedisce la visualizzazione delle notifiche nella barra di stato sui dispositivi che supportano le barre di stato.SUPPRESSED_EFFECT_BADGE
blocca i badge sui dispositivi che li supportano. Per ulteriori informazioni, consulta Modificare un badge di notifica.SUPPRESSED_EFFECT_AMBIENT
blocca le notifiche sui dispositivi che supportano i display Ambient.SUPPRESSED_EFFECT_NOTIFICATION_LIST
impedisce la visualizzazione delle notifiche nella visualizzazione elenco sui dispositivi che supportano tale visualizzazione, come l'area notifiche o la schermata di blocco.
Supporto della modalità multicamera e aggiornamenti delle videocamere
Sui dispositivi con Android 9, puoi accedere agli stream contemporaneamente da due o più videocamere. Sui dispositivi con due fotocamere anteriori o posteriori, puoi creare funzionalità innovative non possibili con una sola fotocamera, come lo zoom continuo, il bokeh e la visione stereo. L'API ti consente anche di chiamare uno stream di videocamere logiche o fuse che passa automaticamente da due o più videocamere.
Altri miglioramenti apportati alla videocamera includono la possibilità di aggiungere parametri per ridurre i ritardi durante l'acquisizione iniziale e mostrare la condivisione i client della videocamera gestiscono vari casi d'uso senza la necessità di avviare e arrestare lo streaming della videocamera. Abbiamo anche aggiunto API per Flash basato su display assistenza e l'accesso all'OIS timestamp per la stabilizzazione delle immagini e gli effetti speciali a livello di app.
In Android 9 l'API multi-fotocamera supporta le fotocamere monocromatiche per i dispositivi con funzionalità FULL
o LIMITED
.
L'output monocromatico viene ottenuto tramite il formato YUV_420_888
con Y in scala di grigi, U (Cb) pari a 128 e V (Cr) pari a 128.
Android 9 supporta anche le videocamere esterne USB/UVC sui dispositivi supportati.
ImageDecoder per drawable e bitmap
Android 9 introduce il
ImageDecoder
che offre un approccio modernizzato per la decodifica delle immagini. Utilizza questo corso
anziché BitmapFactory
e BitmapFactory.Options
su quelle di livello inferiore.
ImageDecoder
ti consente di creare un
Drawable
o un
Bitmap
da un buffer di byte, un file o un URI. Per decodificare un'immagine, prima richiama
createSource()
con l'origine dell'immagine codificata. Quindi, chiama
decodeDrawable()
o decodeBitmap()
passando l'oggetto ImageDecoder.Source
per creare un Drawable
o un Bitmap
. Per modificare le impostazioni predefinite, passa OnHeaderDecodedListener
a decodeDrawable()
o decodeBitmap()
. ImageDecoder
chiamate
onHeaderDecoded()
con la larghezza e l'altezza predefinite dell'immagine, una volta note.
Se l'immagine codificata è una GIF animata o WebP, decodeDrawable()
restituisce un
Drawable
che è un'istanza della classe
AnimatedImageDrawable
.
Esistono diversi metodi per impostare le proprietà delle immagini:
- Per ridimensionare l'immagine decodificata a una dimensione esatta, trasmetti le dimensioni target in
setTargetSize()
Puoi anche ridimensionare le immagini utilizzando un campione. Passa la dimensione del campione direttamente asetTargetSampleSize()
. - Per ritagliare un'immagine all'interno dell'intervallo dell'immagine ridimensionata, richiama
setCrop()
- Per creare una bitmap mutabile, passa
true
asetMutableRequired()
.
ImageDecoder
ti consente inoltre di aggiungere effetti personalizzati e complicati a un'immagine
come angoli arrotondati o
le maschere circolari. Utilizza le funzionalità di
setPostProcessor()
con un'istanza
PostProcessor
per eseguire i comandi di disegno che desideri.
Animazione
Android 9 introduce la classe
AnimatedImageDrawable
per disegnare e visualizzare immagini animate GIF e WebP.
AnimatedImageDrawable
funziona in modo simile a
AnimatedVectorDrawable
in quanto il thread di rendering guida le animazioni di AnimatedImageDrawable
.
Il thread di rendering utilizza anche un thread worker per la decodifica, in modo che
interferiscono con altre operazioni sul thread di rendering. Questa implementazione consente alla tua app di visualizzare un'immagine animata senza gestirne gli aggiornamenti o interferire con altri eventi nel thread dell'interfaccia utente dell'app.
Un AnimatedImageDrawable
può essere decodificato utilizzando un'istanza di
ImageDecoder
Il seguente
snippet di codice mostra come utilizzare ImageDecoder
per decodificare il
AnimatedImageDrawable
:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ImageDecoder
offre diversi metodi che ti consentono di modificare ulteriormente l'immagine.
Ad esempio, puoi utilizzare
setPostProcessor()
per modificare l'aspetto dell'immagine, ad esempio applicando una maschera circolare o
angoli arrotondati.
Video HDR VP9, compressione delle immagini HEIF e API Media
Android 9 offre il supporto integrato per High Dynamic Range (HDR) VP9 Profile 2, per poter mostrare agli utenti film compatibili con HDR da YouTube, Play Film e altre sorgenti su dispositivi compatibili con HDR.
Android 9 aggiunge anche il supporto per la codifica delle immagini tramite l'immagine ad alta efficienza
Formato file (HEIF
o HEIC), che migliora la compressione e riduce lo spazio di archiviazione e i dati di rete
all'utilizzo delle risorse. Gli esempi di immagini statiche HEIF sono supportati nel
MediaMuxer
e MediaExtractor
. Con il supporto della piattaforma sui dispositivi Android 9, è facile inviare e
utilizza le immagini HEIF del server di backend. Dopo aver verificato che la tua app sia compatibile con questo formato di dati per la condivisione e la visualizzazione, prova HEIF come formato di archiviazione delle immagini nella tua app. Puoi eseguire una conversione da JPEG a HEIF utilizzando ImageDecoder
o BitmapFactory
(che ottiene un bitmap da un file JPEG). Puoi quindi utilizzare
HeifWriter
per scrivere immagini fisse HEIF da buffer di byte YUV o istanze di
Surface
o
Bitmap
.
Le metriche relative ai media sono disponibili anche nel
AudioTrack
,
AudioRecord
,
e MediaDrm
.
Android 9 introduce metodi per
Classe MediaDRM
per ottenere metriche, HDCP
livelli di sicurezza, livelli di sicurezza e numero di sessioni nonché di aggiungere un maggiore controllo
livelli di sicurezza e punti di accesso sicuri. Vedi la diff. API
report per maggiori dettagli.
In Android 9, l'API AAudio aggiunge il supporto di diversi attributi AAudioStream aggiuntivi, tra cui utilizzo, tipo di contenuti e preset di input. Con questi attributi, puoi creare flussi di dati
e ottimizzati per applicazioni VoIP o videocamere. Puoi anche impostare l'ID sessione su
associare uno stream AAudio a un submix che può includere effetti. Utilizza l'API
AudioEffect
per controllare gli effetti.
Android 9 introduce l'API
AudioEffect
per
l'elaborazione delle dinamiche.
Con questo corso puoi creare effetti audio basati su canali, tra cui equalizzazione, compressione multibanda e limiter, in più fasi. La
di bande e fasi attive è configurabile e la maggior parte dei parametri può
controllato in tempo reale.
Sensibilità al costo dei dati in JobScheduler
A partire da Android 9, JobScheduler
puoi utilizzare gli indicatori dello stato della rete forniti dagli operatori per migliorare la gestione
delle attività correlate alla rete.
I job possono dichiarare le dimensioni stimate dei dati, segnalare il pre-caricamento e specificare requisiti di rete dettagliati. JobScheduler
gestisce quindi il lavoro in base a
lo stato della rete. Ad esempio, se la rete segnala che è congestionata,
JobScheduler
potrebbe rimandare richieste di rete di grandi dimensioni. Quando un utente
rete non a consumo, JobScheduler
può eseguire job di precaricamento
migliorare l'esperienza utente, ad esempio precaricando i titoli.
Quando aggiungi offerte di lavoro, assicurati di utilizzare setEstimatedNetworkBytes()
,
setPrefetch()
,
e setRequiredNetwork()
quando opportuno per aiutare
JobScheduler
gestire correttamente il lavoro. Quando il job viene eseguito,
assicurati di utilizzare l'oggetto Network
restituito da
JobParameters.getNetwork()
.
Altrimenti utilizzerai implicitamente la rete predefinita del dispositivo,
potrebbero non soddisfare i requisiti, causando un utilizzo involontario dei dati.
API Neural Networks 1.1
L'API Neural Networks è stata introdotta in Android 8.1 (livello API 27) per accelerare il machine learning on-device su Android. Android 9 espande e migliora l'API, aggiungendo per nove nuove operazioni:
- Operazioni matematiche a livello di elementi:
- Operazioni sugli array:
Problema noto:durante il superamento
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
tensori al
ANEURALNETWORKS_PAD
disponibile su Android 9 e versioni successive,
l'output da NNAPI potrebbe non corrispondere a quello della macchina di livello superiore
modelli di apprendimento, come
TensorFlow Lite. Devi invece passare solo ANEURALNETWORKS_TENSOR_FLOAT32
finché il problema non viene risolto.
Inoltre, l'API introduce anche una nuova funzione,
ANeuralNetworksModel_relaxComputationFloat32toFloat16()
,
che consente di specificare se calcolare
ANEURALNETWORKS_TENSOR_FLOAT32
con un intervallo e una precisione inferiori a quelli del formato a virgola mobile a 16 bit IEEE 754.
Framework di compilazione automatica
Android 9 introduce diversi miglioramenti che la compilazione automatica che possono implementare per migliorare ulteriormente l'esperienza utente durante la compilazione moduli. Per scoprire di più su come utilizzare le funzionalità di compilazione automatica nell'app, consulta le Guida al framework di compilazione automatica.
Miglioramenti alla sicurezza
Android 9 introduce una serie di funzionalità di sicurezza, un riepilogo delle sezioni seguenti:
Android Protected Confirmation
I dispositivi supportati con Android 9 o versioni successive ti consentono di utilizzare la funzionalità Android Protected Confirmation. Quando utilizzi questo flusso di lavoro, mostra una richiesta all'utente, chiedendogli di approvare una breve dichiarazione. Questa dichiarazione consente all'app di confermare che l'utente vuole completare una transazione sensibile, ad esempio effettuare un pagamento.
Se l'utente accetta l'istruzione, l'archivio chiavi Android riceve e archivia un
una firma crittografica protetta da un sistema di autenticazione dei messaggi con hash con chiave
(HMAC). Dopo che l'archivio chiavi Android conferma la validità del messaggio, l'app
può usare la chiave generata da trustedConfirmationRequired
nell'elenco indirizzi attendibili
di esecuzione (TEE) per firmare il messaggio accettato dall'utente. La
indica, con un'alta probabilità, che l'utente abbia visto
dichiarativo e che lo ha accettato.
Attenzione: la funzionalità di conferma protetta di Android non fornisce un canale di informazioni sicuro per l'utente. La tua app non può assumere alcun impegno di riservatezza oltre a quello offerto dalla piattaforma Android. Nel particolare, non utilizzare questo flusso di lavoro per visualizzare informazioni sensibili che che di solito non vengono mostrati sul dispositivo dell'utente.
Per indicazioni su come aggiungere il supporto di Android Protected Confirmation, consulta la guida su Android Protected Confirmation.
Finestra di dialogo di autenticazione biometrica unificata
In Android 9, il sistema fornisce le finestre di dialogo di autenticazione biometrica per conto della tua app. Questa funzionalità crea un aspetto, un'esperienza e un posizionamento standardizzati per la finestra di dialogo, garantendo agli utenti una maggiore sicurezza di eseguire l'autenticazione con un controllo delle credenziali biometriche attendibile.
Se la tua app utilizza
FingerprintManager
per mostrare agli utenti una finestra di dialogo per l'autenticazione tramite impronta, passa all'uso
BiometricPrompt
. BiometricPrompt
si basa sul sistema per visualizzare la finestra di dialogo di autenticazione. Cambia inoltre il suo comportamento per adattarsi al tipo di dato biometrico.
l'autenticazione selezionata dall'utente.
Modulo di sicurezza hardware
I dispositivi supportati con Android 9 o versioni successive possono Disporre di StrongBox Keymaster, un'implementazione dell'HAL Keymaster che che risiedono in un modulo di sicurezza hardware. Il modulo contiene quanto segue:
- La sua CPU.
- Archiviazione sicura.
- Un generatore di numeri casuali
- Meccanismi aggiuntivi per resistere alla manomissione dei pacchetti e al sideload non autorizzato delle app.
Quando controlla le chiavi memorizzate in StrongBox Keymaster, il sistema conferma l'integrità di una chiave con il Trusted Execution Environment (TEE).
Per scoprire di più sull'utilizzo di Strongbox Keymaster, consulta Modulo di sicurezza hardware.
Importazione sicura della chiave nell'archivio chiavi
Android 9 offre un'ulteriore sicurezza per la decrittografia delle chiavi aggiungendo è possibile importare le chiavi criptate in modo sicuro nell'archivio chiavi utilizzando un Formato della chiave con codifica ASN.1. Il Keymaster quindi decripta le chiavi nel Archivio chiavi, in modo che i contenuti delle chiavi non vengano mai visualizzati come testo non crittografato nella memoria host del dispositivo.
Scopri di più su come importare le chiavi criptate in modo sicuro.
Schema di firma dell'APK con rotazione della chiave
Android 9 aggiunge il supporto per lo schema di firma dell'APK v3. Questo schema ha la possibilità di includere un record di prova della rotazione nel blocco di firma per ogni certificato di firma. Questa funzionalità consente di firmare la tua app con una nuova firma collegando i certificati di firma precedenti del file APK a quelli con che ora è firmato.
Scopri di più su come ruotare le chiavi utilizzando
apksigner
.
Opzione per consentire la decrittografia delle chiavi solo sui dispositivi sbloccati
Android 9 introduce il flag unlockedDeviceRequired
. Questa opzione determina se il Keystore richiede lo sblocco dello schermo prima di consentire la decrittografia di eventuali dati in transito o archiviati utilizzando la chiave specificata. Questi tipi di chiavi sono molto adatti per criptare i dati sensibili da archiviare su disco, ad esempio dati sanitari o aziendali. Il flag offre agli utenti una maggiore garanzia che
In caso di smarrimento dello smartphone, i dati non possono essere decriptati mentre il dispositivo è bloccato
o rubato.
Per proteggere una chiave dalla decrittografia mentre il dispositivo è bloccato, abilita il flag
passando true
a setUnlockedDeviceRequired()
. Dopo aver completato questo passaggio, quando lo schermo dell'utente è bloccato, qualsiasi
i tentativi di decriptare o firmare i dati utilizzando questa chiave non sono andati a buon fine. Per accedere a un dispositivo bloccato è necessario un PIN, una password, un'impronta o un altro fattore attendibile.
Supporto della crittografia legacy
I dispositivi Android 9 forniti con Keymaster 4 supportano la tecnologia Triple Data Algoritmo di crittografia o Triple DES. Se la tua app interagisce con le versioni precedenti per i sistemi che richiedono Triple DES, è necessario usare questo tipo di cifratura e credenziali sensibili.
Per scoprire di più su come rendere più sicura la tua app, vedi Sicurezza per Android Sviluppatori.
Ritiro del WPS
La Configurazione protetta Wi-Fi (WPS) è stata ritirata per motivi di sicurezza.
Backup di Android
Android 9 aggiunge nuove funzionalità e opzioni per sviluppatori correlate per il backup e il ripristino. I dettagli su queste modifiche sono riportati nelle seguenti sezioni.
Backup della crittografia lato client
Android 9 aggiunge il supporto per la crittografia dei backup di Android con un segreto lato client. Questo supporto viene attivato automaticamente quando: sono soddisfatte:
- L'utente ha attivato il backup utilizzando Android 9 o versioni successive.
- L'utente ha impostato un blocco schermo per il suo dispositivo che richiede un PIN, una sequenza o una password per lo sblocco.
Quando questa misura di privacy è attivata, il PIN, la sequenza o la password del dispositivo è obbligatoria per ripristinare i dati dai backup effettuati dal dispositivo dell'utente. Per scoprire di più sulla tecnologia alla base di questa funzionalità, consulta il white paper Google Cloud Key Vault Service.
Definisci le condizioni del dispositivo necessarie per il backup
Se i dati dell'app includono informazioni sensibili o preferenze, Android 9 consente di definire il dispositivo in base alle quali i dati dell'app sono inclusi nel backup dell'utente, ad esempio quando il backup è lato client la crittografia sia attiva o è in corso un trasferimento locale da un dispositivo all'altro.
Per scoprire di più sul backup dei dati sui dispositivi Android, consulta l'articolo Informazioni Panoramica del backup.
Accessibilità
Android 9 introduce miglioramenti all'accessibilità che semplificano l'offerta di esperienze ancora migliori la tua app.
Semantica della navigazione
Gli attributi aggiunti in Android 9 ti consentono di definire più facilmente in che modo dei servizi di accessibilità, in particolare gli screen reader, navigano da una parte schermo a un altro. Questi attributi possono aiutare gli utenti con disabilità visive a navigare rapidamente nel testo dell'interfaccia utente dell'app e a effettuare una selezione.
Ad esempio, in un'app di shopping, uno screen reader può aiutare gli utenti a passare direttamente da una categoria di offerte all'altra, senza dover leggere tutti gli elementi di una categoria prima di passare alla successiva.
Titoli del riquadro Accessibilità
In Android 8.1 (livello API 27) e versioni precedenti, i servizi di accessibilità non possono sempre determinare quando è stato aggiornato un riquadro specifico dello schermo, ad esempio quando un'attività sostituisce un frammento con un altro. I riquadri sono costituiti da Elementi UI visivamente raggruppati e legati alla logica, che in genere comprendono .
In Android 9, puoi fornire titoli dei riquadri di accessibilità o titoli identificabili singolarmente per questi riquadri. Se un riquadro ha un titolo del riquadro di accessibilità, i servizi di accessibilità ricevono informazioni più dettagliate quando il riquadro cambia. Questa funzionalità consente ai servizi di fornire informazioni più granulari all'utente le modifiche dell'interfaccia utente.
Per specificare il titolo di un riquadro, utilizza il metodo
android:accessibilityPaneTitle
. Puoi anche aggiornare il titolo di un riquadro dell'interfaccia utente che viene sostituito in fase di esecuzione utilizzando setAccessibilityPaneTitle()
.
Ad esempio, potresti fornire un titolo per l'area dei contenuti di una
Fragment
.
Navigazione basata su intestazioni
Se l'app visualizza contenuti testuali che includono intestazioni logiche, imposta la
android:accessibilityHeading
a true
per le istanze di
View
che rappresentano queste intestazioni. Di
aggiungendo queste intestazioni, consenti ai servizi di accessibilità di aiutare gli utenti a navigare
da un'intestazione all'altra. Qualsiasi servizio di accessibilità può utilizzare questa funzionalità per migliorare l'esperienza di navigazione nell'interfaccia utente degli utenti.
Navigazione e output del gruppo
Gli screen reader utilizzano tradizionalmente
Attributo android:focusable
a
determinare quando devono leggere un
ViewGroup
o una raccolta di
View
oggetti come una singola unità. In questo modo
Gli utenti capivano che le visualizzazioni erano logicamente correlate tra loro.
In Android 8.1 e versioni precedenti, devi contrassegnare ogni oggetto View
all'interno di un
ViewGroup
come non acquisibile e il ViewGroup
stesso come acquisibile. Questo
questa disposizione ha consentito di contrassegnare alcune istanze di View
come attivabili in modo che
ha reso la navigazione da tastiera più complicata.
A partire da Android 9, puoi utilizzare l'attributo
android:screenReaderFocusable
al posto dell'attributo android:focusable
nelle situazioni in cui
l'assegnazione del fuoco a un oggetto View
ha conseguenze indesiderate. Screen reader
imposta lo stato attivo su tutti gli elementi che hanno impostato android:screenReaderFocusable
o da android:focusable
a true
.
Azioni pratiche
Android 9 aggiunge il supporto per l'esecuzione di azioni di praticità per conto degli utenti:
- Interazione con le descrizioni comando
- Le funzionalità aggiunte nel framework di accessibilità ti consentono di accedere a:
descrizioni comando nell'interfaccia utente di un'app. Utilizza le funzionalità di
getTooltipText()
per leggere il testo di una descrizione comando e utilizzareACTION_SHOW_TOOLTIP
eACTION_HIDE_TOOLTIP
per indicare alle istanze diView
di mostrare nascondendo le relative descrizioni comando. - Azioni globali aggiunte
- Android 9 introduce il supporto per due azioni aggiuntive dei dispositivi nella
AccessibilityService
. Il tuo servizio può aiutare gli utenti a bloccare i loro dispositivi e acquisire screenshot utilizzando rispettivamente le azioniGLOBAL_ACTION_LOCK_SCREEN
eGLOBAL_ACTION_TAKE_SCREENSHOT
.
Dettagli del cambio di finestra
Android 9 semplifica il monitoraggio degli aggiornamenti delle finestre di un'app quando un'app redraws più finestre contemporaneamente. Quando si verifica un
TYPE_WINDOWS_CHANGED
evento, utilizza l'API
getWindowChanges()
per determinare in che modo le finestre sono cambiate. Durante un aggiornamento multifinestra, ogni finestra produce il proprio insieme di eventi.
Il metodo getSource()
restituisce la visualizzazione principale della finestra associata a ogni evento.
Se un'app ha definito titoli del riquadro di accessibilità per i suoi oggetti View
, il tuo servizio può riconoscere quando l'interfaccia utente dell'app viene aggiornata. Quando si verifica un evento
TYPE_WINDOW_STATE_CHANGED
, utilizza i tipi restituiti da
getContentChangeTypes()
per determinare in che modo la finestra è cambiata. Ad esempio, il framework può
rilevare quando un riquadro ha un nuovo titolo o quando un riquadro scompare.
Rotazione
Per eliminare le rotazioni involontarie, abbiamo aggiunto una modalità che blocca la corrente anche se la posizione del dispositivo cambia. Gli utenti possono attivare la rotazione manualmente, se necessario, premendo un pulsante nella barra di sistema.
Nella maggior parte dei casi, gli impatti sulla compatibilità delle app sono minimi. Tuttavia, se la tua app ha un comportamento di rotazione personalizzato o utilizza impostazioni di orientamento dello schermo insolite, potresti riscontrare problemi che prima sarebbero passati inosservati, quando la preferenza di rotazione dell'utente era sempre impostata su Ritratto. Ti invitiamo a esaminare il comportamento di rotazione in tutte le attività chiave della tua app e ad assicurarti che tutte le impostazioni di orientamento dello schermo continuino a offrire un'esperienza ottimale.
Per ulteriori dettagli, consulta il comportamento associato modifiche.

La nuova modalità di rotazione consente agli utenti di attivare manualmente la rotazione quando necessario utilizzando un pulsante nella barra di sistema.
Testo
Android 9 introduce nella piattaforma le seguenti funzionalità relative al testo:
Testo precalcolato: la classe
PrecomputedText
migliora le prestazioni di rendering del testo consentendo di calcolare e memorizzare in cache le informazioni richieste in anticipo. Inoltre, consente all'app di eseguire il layout del testo al di fuori del thread principale.Lente d'ingrandimento: la classe
Magnifier
è un widget della piattaforma che fornisce un'API Lente d'ingrandimento, consentendo un'esperienza coerente con la funzionalità Lente d'ingrandimento in tutte le app.Smart Linkify: Android 9 migliora la classe
TextClassifier
, che sfrutta il machine learning per identificare alcune entità nel testo selezionato e suggerire azioni. Ad esempio,TextClassifier
può consentire alla tua app di rilevare che l'utente ha selezionato un numero di telefono. La tua app potrebbe quindi suggerire che l'utente effettua una telefonata utilizzando quel numero. Le funzionalità inTextClassifier
sostituiscono la funzionalità della classeLinkify
.Layout del testo: diversi metodi e attributi semplificano la a implementare il design della UI. Per maggiori dettagli, consulta la documentazione di riferimento per
TextView
Conversione ART in anteprima dei file DEX
Sui dispositivi con Android 9 o versioni successive, il runtime di Android (ART) il compilatore in anticipo ottimizza ulteriormente Dalvik Executable compresso (DEX) convertendo i file DEX di un pacchetto di app in un rappresentazione compatta. Questa modifica consente all'app di avviarsi più velocemente e di consumare meno spazio su disco e RAM.
Questo miglioramento è particolarmente vantaggioso per i dispositivi di fascia bassa con I/O del disco più lento velocità effettiva.
Monitoraggio del sistema sul dispositivo
Android 9 ti consente di registrare le tracce di sistema dal tuo dispositivo, quindi di condividere un report di queste registrazioni con il tuo team di sviluppo. Questo report supporta diversi formati, incluso HTML.
Raccogliendo queste tracce, puoi acquisire i dati relativi ai tempi relativi ai processi e ai thread della tua app e visualizzare altri tipi di stati del dispositivo significativi a livello globale.
Per scoprire di più su questo strumento, consulta Eseguire il monitoraggio del sistema sul dispositivo.