Funzionalità e API di Android 9

Android 9 (livello API 28) introduce nuove fantastiche funzionalità e capacità per utenti e sviluppatori. Questo documento mette in evidenza le novità per gli sviluppatori.

Per saperne di più sulle nuove API, leggi il Report delle differenze API o visita il Riferimento API Android. Non dimenticare di controllare Cambiamenti del comportamento di Android 9 da apprendere sulle aree in cui le modifiche apportate alle piattaforme potrebbero interessare le tue app.

Posizionamento in ambienti interni con Wi-Fi RTT

Le nuove API RTT supportano il posizionamento in ambienti interni nelle tue app.

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 che supportano hardware, le app possono utilizzare API RTT per misurare distanza dagli access point (AP) Wi-Fi compatibili con RTT nelle vicinanze. Il dispositivo deve avere servizi di geolocalizzazione attivi e ricerca di reti Wi-Fi attiva (sotto Impostazioni > Posizione) e la tua app deve avere ACCESS_FINE_LOCATION: autorizzazione. Per utilizzare la funzionalità RTT, il dispositivo non deve essere connesso ai punti di accesso. Per garantire la privacy, solo lo smartphone è in grado di determinare la distanza dal punto di accesso i punti di accesso non hanno queste informazioni.

Se il dispositivo misura la distanza da 3 o più punti di accesso, puoi utilizzare un algoritmo multilaterale per stimare la posizione del dispositivo più adatta a quelle le misurazioni. In genere, il risultato è preciso entro 1-2 metri.

Con questa precisione, puoi creare nuove esperienze, come la navigazione integrata e servizi granulari basati sulla posizione geografica, come il controllo vocale (ad es. "Accendi questa luce") e 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 per ritaglio display

Schermata Opzioni sviluppatore con diverse dimensioni di ritaglio

Test del ritaglio display con l'emulatore

Android 9 offre supporto per i più recenti schermi edge-to-edge che contengono ritagli del display per videocamere e altoparlanti. La DisplayCutout consente di scoprire la posizione e la forma delle aree non funzionali in cui non devono essere visualizzati. Per determinare l’esistenza e il posizionamento queste aree di ritaglio, utilizza getDisplayCutout() .

Un nuovo attributo layout finestra, layoutInDisplayCutoutMode, consente all'app di disporre i contenuti attorno ai ritagli del dispositivo. Puoi impostare questo attributo a uno dei seguenti valori:

Puoi simulare un ritaglio schermo su qualsiasi dispositivo o emulatore con Android 9 come segue:

  1. Attiva le opzioni sviluppatore.
  2. Nella schermata Opzioni sviluppatore, scorri verso il basso fino alla sezione Disegno. e seleziona Simula un display con un ritaglio.
  3. Seleziona la dimensione del ritaglio.
di Gemini Advanced.

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.

Notifiche di messaggistica

Stile di messaggistica con foto allegata.

Notifica di messaggistica

Stile dei messaggi con risposte e conversazioni.

Per il codice di esempio che utilizza le notifiche, incluse le funzionalità di Android 9, consulta l' Persone Esempio.

Esperienza di messaggistica avanzata

A partire da Android 7.0 (livello API 24), puoi aggiungere un'azione a cui rispondere o inserire altro testo direttamente dalla notifica. Funzionalità avanzate di Android 9 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 avatar e URI. Molte altre API, come addMessage(), ora utilizza la classe Person anziché una CharSequence. Il corso Person supporta anche il pattern di progettazione di Builder.

  • Supporto delle immagini: Android 9 ora mostra le immagini nelle notifiche di Messaggi. sui telefoni. Puoi utilizzare la modalità setData() sul messaggio per visualizzare un'immagine. Il seguente snippet di codice mostra come per creare un Person 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 usare questa funzionalità extra per precompilare i campi di testo nell'app in modo che gli utenti possano completa la risposta.

  • Identifica se una conversazione è di gruppo: puoi utilizzare setGroupConversation() per identificare intenzionalmente una conversazione come conversazione di gruppo o non di gruppo.

  • Imposta l'azione semantica per un intent: setSemanticAction() consente di dare 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 modalità 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: ora il sistema Android invia gli 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 reagire di conseguenza. Per ulteriori informazioni su queste azioni mirate ed extra, fai riferimento all'elenco di costanti aggiornate NotificationManager riferimento. Per informazioni su come reagire agli intenti di trasmissione, consulta: Trasmissioni.

  • NotificationManager.Policy ha tre nuove categorie di priorità Non disturbare:

  • NotificationManager.Policy ha anche sette nuove costanti Non disturbare che puoi utilizzare per eliminare le interruzioni visive:

Supporto della modalità multicamera e aggiornamenti della fotocamera

Sui dispositivi con Android 9, puoi accedere agli stream contemporaneamente da due o più videocamere. Sui dispositivi con fotocamere anteriori e posteriori, puoi creare funzionalità innovative che non è possibile ottenere con una sola videocamera, come l'integrazione zoom, bokeh e visione stereo. L'API consente inoltre di chiamare un modello stream della videocamera che passa automaticamente da una o più videocamere all'altra.

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, la funzionalità multicamera tramite Google Cloud supporta le fotocamere monocromatiche per i dispositivi con FULL o LIMITED. L'output monocromatico si ottiene YUV_420_888 con Y in scala di grigi, U (Cb) come 128 e V (Cr) come 128.

Android 9 consente inoltre il supporto per USB/UVC esterne videocamere attive 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 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() oppure decodeBitmap() passando ImageDecoder.Source oggetto per creare un Drawable o Bitmap. Per modificare 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 un WebP, decodeDrawable() restituisce un Drawable, che è un'istanza 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 una dimensione campione. Trasmetti la dimensione del campione direttamente setTargetSampleSize()
  • Per ritagliare un'immagine all'interno dell'intervallo dell'immagine ridimensionata, richiama setCrop()
  • Per creare una bitmap modificabile, passa true a setMutableRequired()

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 il AnimatedImageDrawable per disegnare e visualizzare immagini animate in formato 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 nella tua app di mostrare un'immagine animata senza gestirne gli aggiornamenti oppure che interferiscono con altri eventi nel thread dell'interfaccia utente dell'app.

Un AnimatedImageDrawable può essere decodificato utilizzando un'istanza di ImageDecoder Le seguenti lo snippet di codice mostra come utilizzare ImageDecoder per decodificare 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.

HDR VP9 Video, 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 i tuoi l'app è compatibile con questo formato dati per la condivisione e la visualizzazione, prova HEIF come formato di archiviazione delle immagini nell'app. Puoi effettuare una conversione da jpeg a heic utilizzando ImageDecoder BitmapFactory (che ottiene una bitmap da un file JPEG). Puoi quindi utilizzare HeifWriter per scrivere in HEIF immagini statiche da buffer di byte YUV o istanze di Surface oppure 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 supporto di diversi attributi AAudioStream aggiuntivi, tra cui utilizzo, contenuti predefinito 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 la API AudioEffect per controllare e gli effetti sonori.

Android 9 introduce il API AudioEffect per elaborazione dinamica. Con questo corso puoi creare effetti audio basati sul canale, tra cui: equalizzazione, compressione multi-banda 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 possono utilizzare gli indicatori di stato della rete forniti dagli operatori per migliorare la gestione di offerte di lavoro legate alla rete.

I job possono dichiarare la dimensione stimata dei dati, segnalare il precaricamento e specificare e 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

È stata introdotta l'API Neural Networks in Android 8.1 (livello API 27) per accelerare il machine learning sul dispositivo Android. Android 9 espande e migliora l'API, aggiungendo per nove nuove operazioni:

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. Tu deve passare solo ANEURALNETWORKS_TENSOR_FLOAT32 finché il problema non viene risolto.

Inoltre, l'API introduce anche una nuova funzione, ANeuralNetworksModel_relaxComputationFloat32toFloat16(), che ti permette di specificare se calcolare ANEURALNETWORKS_TENSOR_FLOAT32 con un intervallo e una precisione inferiori a quelli della rappresentazione in virgola mobile a 16 bit dello IEEE 754 formato.

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 offrono possibilità di utilizzare Android Protected Confirmation. Quando utilizzi questo flusso di lavoro, mostra una richiesta all'utente, chiedendogli di approvare una breve dichiarazione. Questa affermazione consente all'app di confermare che l'utente vuole completare una transazioni sensibili, come l'esecuzione di 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 conferma Android Protected Check non fornisce un canale sicuro per le informazioni. La tua app non può presupporre alcun garanzie di riservatezza oltre a quelle offerte dalla piattaforma Android. Nella particolare, non utilizzare questo flusso di lavoro per visualizzare informazioni sensibili che che di solito non vengono mostrati sul dispositivo dell'utente.

Per indicazioni sull'aggiunta del supporto per Android Protected Confirmation, consulta Protezione Android Conferma guida.

Finestra di dialogo Autenticazione biometrica unificata

In Android 9, il sistema fornisce finestre di dialogo di autenticazione biometrica per conto della tua app. Questa funzionalità crea un aspetto, un design e un posizionamento standardizzati per la finestra di dialogo, dando agli utenti una maggiore sicurezza di eseguire l'autenticazione rispetto un servizio di verifica delle credenziali biometriche affidabile.

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 l'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 impedire le manomissioni dei pacchetti e il sideload non autorizzato di app.

Durante il controllo delle chiavi memorizzate in StrongBox Keymaster, il sistema conferma una dell'integrità della chiave con il Trusted Execution Environment (TEE).

Per ulteriori informazioni sull'utilizzo di Strongbox Keymaster, consulta Sicurezza hardware Modulo.

Importazione sicura delle chiavi 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 di rotazione nel blocco di firma per ogni firma certificato. 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 decriptazione delle chiavi solo sui dispositivi sbloccati

Android 9 introduce il flag unlockedDeviceRequired. Questa opzione determina se l'archivio chiavi richiede lo sblocco dello schermo prima di consentire la decrittografia di qualsiasi dato in transito o archiviato utilizzando la chiave specificata. Questi tipi di chiavi sono particolarmente adatte per criptare dati sensibili da archiviare su disco, come 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. Un dispositivo bloccato richiede un PIN, password, impronta o qualche altro fattore attendibile o rifiutano le richieste in base all'organizzazione a cui si accede.

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 di WPS

Per motivi di sicurezza, la configurazione protetta Wi-Fi (WPS) è stata ritirata.

Backup di Android

Android 9 aggiunge nuove funzionalità e opzioni per sviluppatori correlate per il backup e il ripristino. I dettagli di queste modifiche vengono visualizzati nel seguente sezioni.

Backup della crittografia lato client

Android 9 aggiunge il supporto per la crittografia dei backup di Android con un un secret lato client. Questo supporto viene attivato automaticamente quando: sono soddisfatte:

Quando questa misura per la privacy è attiva, il PIN, la sequenza o la password del dispositivo vengono necessaria per ripristinare i dati dai backup eseguiti dal dispositivo dell'utente. Per ulteriori informazioni per ulteriori informazioni sulla tecnologia alla base di questa funzionalità, consulta Google Cloud Key Vault White paper sul servizio.

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à visiva spostarsi rapidamente tra il testo nell'UI dell'app e consentire agli utenti di effettuare una selezione.

Ad esempio, in un'app per lo shopping, uno screen reader può aiutare gli utenti a navigare direttamente da una categoria di offerte all'altra, senza lo screen reader leggere tutti gli elementi di una categoria prima di passare a quella successiva.

Titoli del riquadro Accessibilità

In Android 8.1 (livello API 27) e versioni precedenti, i servizi di accessibilità non possono sempre determinano 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 del riquadro di accessibilità o singolarmente e identificabili, per questi riquadri. Se un riquadro ha un titolo per l'accessibilità, i servizi di accessibilità ricevono informazioni più dettagliate quando il riquadro viene modificato. 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 che viene sostituito nella pagina utilizzando setAccessibilityPaneTitle(). Ad esempio, potresti fornire un titolo per l'area dei contenuti di una Fragment.

Navigazione basata sulle 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ò usare per migliorare le prestazioni esperienza di navigazione nell'UI.

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 attivabile e ViewGroup stessa come attivabile. 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 android:screenReaderFocusable invece dell'attributo android:focusable nei casi in cui rendere attivabile 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 eseguire azioni pratiche 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 utilizzare ACTION_SHOW_TOOLTIP e ACTION_HIDE_TOOLTIP per indicare alle istanze di View 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 GLOBAL_ACTION_LOCK_SCREEN e GLOBAL_ACTION_TAKE_SCREENSHOT azioni.

Dettagli del cambio di finestra

Android 9 semplifica il monitoraggio degli aggiornamenti delle finestre di un'app quando ridisegna più finestre contemporaneamente. Quando TYPE_WINDOWS_CHANGED utilizza getWindowChanges() API per determinare come sono state modificate le finestre. Durante un aggiornamento multifinestra, produce il proprio insieme di eventi. La getSource() restituisce la vista root della finestra associata a ciascun evento.

Se per un'app sono stati definiti titoli del riquadro Accessibilità per la relativa View, il tuo servizio può riconoscere quando viene aggiornata l'interfaccia utente dell'app. Quando TYPE_WINDOW_STATE_CHANGED si verifica un evento, utilizza i tipi restituiti getContentChangeTypes() per determinare come è cambiata la finestra. 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 quando necessario premendo un pulsante nella barra di sistema.

Nella maggior parte dei casi, l'impatto sulla compatibilità delle app è minimo. Tuttavia, se l'app ha un comportamento di rotazione personalizzato o un orientamento dello schermo insolito impostazioni, si potrebbero riscontrare problemi che prima non sarebbero stati rilevati, quando la preferenza di rotazione degli utenti è sempre stata impostata su verticale. Ti invitiamo a prendere una il comportamento di rotazione in tutte le attività chiave dell'app e assicurati che tutte le impostazioni di orientamento dello schermo presentino un'esperienza ottimale.

Per ulteriori dettagli, consulta il comportamento associato modifiche.

Rotazione su dispositivo mobile che mostra una nuova modalità di rotazione che consente agli utenti di attivare manualmente la rotazione

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 le seguenti funzionalità di testo nel piattaforma:

  • Testo precalcolato: PrecomputedText corso migliora di rendering del testo, consentendoti di calcolare e memorizzare nella cache le le informazioni in anticipo. Consente inoltre alla tua app di disattivare il layout del testo nel thread principale.

  • Lente d'ingrandimento: la classe Magnifier è una widget della piattaforma che fornisce un'API Magnifier, consentendo una funzionalità di ingrandimento su tutte le app.

  • Smart Linkify: Android 9 migliora la 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à in TextClassifier sostituiscono la funzionalità della classe Linkify.

  • 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 anticipata ART 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 utilizzare di spazio su disco e RAM.

Questo miglioramento è particolarmente vantaggioso per i dispositivi di fascia bassa con I/O del disco più lento velocità effettiva.

Tracciamento del sistema sul dispositivo

Android 9 ti consente di registrare tracce di sistema dal tuo dispositivo, e condividi un report di queste registrazioni con il tuo team di sviluppo. Questo report supporta diversi formati, incluso HTML.

La raccolta di queste tracce ti consente di acquisire dati sulle tempistiche relativi all'esperienza d'uso della tua app. processi e thread e visualizzare altri tipi di dispositivi di rilevanza globale stati.

Per ulteriori informazioni su questo strumento, vedi Eseguire l'upgrade del sistema sul dispositivo di tracciamento.