Funzionalità e API di Android 10

Android 10 introduce caratteristiche e capacità straordinarie per utenti e sviluppatori. Questo documento mette in evidenza le risorse disponibili per gli sviluppatori.

Per scoprire di più sulle API, leggi il report Differenze API o visita il riferimento API Android. Cerca le API che sono state aggiunte al livello API 29. Inoltre, assicurati di controllare le modifiche al comportamento di Android 10 (per le app che hanno come target il livello API 29 e per tutte le app), nonché le modifiche alla privacy, per conoscere le aree in cui le modifiche della piattaforma possono interessare le tue app.

Miglioramenti alla sicurezza

Android 10 introduce una serie di funzionalità di sicurezza, che riassumono nelle sezioni seguenti.

Finestre di dialogo per l'autenticazione biometrica migliorate

Android 10 introduce i seguenti miglioramenti al supporto dell'autenticazione biometrica:

  • Un controllo della funzionalità di autenticazione biometrica.
  • Un meccanismo di riserva che consente a un utente di eseguire l'autenticazione utilizzando il PIN, la sequenza o la password del dispositivo se non può autenticarsi con l'input biometrico.
  • Suggerimento che indica al sistema di non richiedere la conferma dell'utente dopo che quest'ultimo ha eseguito l'autenticazione utilizzando una modalità biometrica implicita. Ad esempio, potresti dire al sistema che non è necessaria un'ulteriore conferma dopo che un utente ha eseguito l'autenticazione mediante l'autenticazione facciale.

Esegui il codice DEX incorporato direttamente dall'APK

A partire da Android 10, puoi impostare la piattaforma in modo che esegua il codice DEX incorporato direttamente dal file APK della tua app. Questa opzione può aiutare a prevenire un attacco nel caso in cui un utente malintenzionato sia riuscito a manomettere il codice compilato in locale sul dispositivo.

Per maggiori informazioni, vedi Eseguire il codice DEX incorporato direttamente dall'APK.

Supporto di TLS 1.3

Android 10 aggiunge il supporto per TLS 1.3. TLS 1.3 è un'importante revisione dello standard TLS che include vantaggi in termini di prestazioni e sicurezza avanzata. I nostri benchmark indicano che le connessioni sicure possono essere stabilite fino al 40% più velocemente con TLS 1.3 rispetto a TLS 1.2.

Per ulteriori dettagli sulla nostra implementazione di TLS 1.3, consulta la sezione TLS nella pagina delle modifiche del comportamento per tutte le app.

API Public Conscrypt

A partire da Android 10, il provider di sicurezza Conscrypt include un'API pubblica per la funzionalità TLS.

La raccolta di classi in android.net.ssl contiene metodi statici per accedere a funzionalità non disponibili dalle API javax.net.ssl generiche. I nomi di queste classi possono essere dedotti come plurale della classe javax.net.ssl corrispondente. Ad esempio, il codice che opera su istanze di javax.net.ssl.SSLSocket può utilizzare invece i metodi di SSLSockets.

Funzionalità di connettività

Android 10 include diversi miglioramenti relativi alla rete e alla connettività.

API Wi-Fi network connection

Android 10 aggiunge il supporto per le connessioni peer-to-peer. Questa funzionalità consente all'app di chiedere all'utente di modificare il punto di accesso a cui è connesso il dispositivo utilizzando WifiNetworkSpecifier per descrivere le proprietà di una rete richiesta. La connessione peer-to-peer viene utilizzata per scopi diversi dalla fornitura di rete, ad esempio per la configurazione del bootstrap per i dispositivi secondari come Chromecast e l'hardware Google Home.

Per ulteriori informazioni, consulta la sezione sull'API Wi-Fi Network Request per la connettività peer-to-peer.

API Wi-Fi network suggestion

Android 10 aggiunge il supporto della tua app per richiedere all'utente di connettersi a un punto di accesso Wi-Fi. Puoi fornire suggerimenti per la rete a cui connetterti. Sarà la piattaforma a scegliere il punto di accesso da accettare in base all'input della tua e di altre app.

Per maggiori informazioni su questa funzionalità, consulta la pagina Suggerimenti per il Wi-Fi.

Miglioramenti alle modalità Wi-Fi ad alte prestazioni e bassa latenza

Android 10 ti consente di fornire un suggerimento al modem sottostante per ridurre al minimo la latenza.

Android 10 estende l'API Wi-Fi Lock per supportare in modo efficace le modalità ad alte prestazioni e a bassa latenza. Il risparmio energetico del Wi-Fi è disattivato per le modalità ad alte prestazioni e a bassa latenza. In questa modalità è possibile abilitare un'ulteriore ottimizzazione della latenza, a seconda del supporto del modem.

La modalità a bassa latenza viene attivata soltanto quando l'applicazione che acquisisce il blocco è in esecuzione in primo piano e lo schermo è attivo. La modalità a bassa latenza è particolarmente utile per le applicazioni di gioco mobile in tempo reale.

Ricerche specializzate nel resolver DNS

Android 10 aggiunge il supporto nativo per ricerche DNS specializzate che utilizzano ricerche in chiaro e la modalità DNS over-TLS. In precedenza, il risolutore DNS della piattaforma supportava solo i record A e AAAA, che consentono di cercare solo gli indirizzi IP associati a un nome, ma non supportava altri tipi di record. L'API DnsResolver offre una risoluzione generica e asincrona, consentendoti di cercare SRV, NAPTR e altri tipi di record. Tieni presente che l'analisi della risposta viene lasciata all'app per eseguire l'analisi.

Per le app basate su NDK, vedi android_res_nsend.

Connessione facile Wi-Fi

Android 10 consente di utilizzare Connessione facile per eseguire il provisioning delle credenziali Wi-Fi su un dispositivo peer, in sostituzione del servizio WPS che è stato ritirato. Le app possono integrare Connessione facile nel loro flusso di configurazione e provisioning utilizzando l'intento di ACTION_PROCESS_WIFI_EASY_CONNECT_URI.

Per ulteriori informazioni su questa funzionalità, consulta la pagina Connessione facile Wi-Fi.

API Wi-Fi Direct connection

Le classi API WifiP2pConfig e WifiP2pManager presentano aggiornamenti in Android 10 per supportare le funzionalità di connessione rapida a Wi-Fi Direct utilizzando informazioni predeterminate. Queste informazioni vengono condivise tramite un canale laterale, come Bluetooth o NFC.

Il seguente esempio di codice mostra come creare un gruppo utilizzando informazioni predeterminate:

Kotlin

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

Java

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

Per unirti a un gruppo utilizzando le credenziali, sostituisci manager.createGroup() con quanto segue:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

Canali orientati alla connessione Bluetooth LE (CoC)

Android 10 consente alla tua app di utilizzare connessioni BLE CoC per trasferire stream di dati più grandi tra due dispositivi BLE. che astrae i meccanismi Bluetooth e di connettività per semplificare l'implementazione.

Funzionalità di telefonia

Android 10 include diversi miglioramenti relativi alla telefonia.

Miglioramenti della qualità delle chiamate

Android 10 consente di raccogliere informazioni sulla qualità delle chiamate IP Multimedia Subsystem (IMS) in corso, inclusa la qualità da e verso la rete, sui dispositivi che supportano la funzionalità.

Filtro delle chiamate e ID chiamante

Android 10 fornisce alla tua app un mezzo per identificare le chiamate non nella rubrica dell'utente come potenziali chiamate indesiderate e per fare in modo che le chiamate indesiderate vengano rifiutate silenziosamente per conto dell'utente. Le informazioni su queste chiamate bloccate vengono registrate come chiamate bloccate nel registro chiamate per fornire maggiore trasparenza all'utente in caso di chiamate bloccate. L'utilizzo di questa API elimina la necessità di ottenere dall'utente le autorizzazioni di READ_CALL_LOG per fornire la funzionalità di filtro delle chiamate e ID chiamante.

API del servizio di reindirizzamento delle chiamate

Android 10 cambia il modo in cui vengono gestiti gli intent di chiamata. La trasmissione NEW_OUTGOING_CALL è deprecata ed è sostituita dall'API CallRedirectionService. L'API CallRedirectionService fornisce interfacce per modificare le chiamate in uscita effettuate dalla piattaforma Android. Ad esempio, le app di terze parti potrebbero annullare le chiamate e reindirizzarle tramite VoIP.

Miglioramenti nella creazione di file su un'unità di archiviazione esterna

Oltre all'introduzione dell'archiviazione con ambito, Android 10 aggiunge le seguenti funzionalità relative all'archiviazione esterna:

  • Puoi utilizzare il flag IS_PENDING per concedere alla tua app l'accesso esclusivo a un file multimediale mentre viene scritto su disco.
  • Se sei a conoscenza di una posizione specifica in cui devono essere archiviati i file, puoi fornire un suggerimento al sistema su dove archiviare i file appena scritti.
  • Ogni dispositivo di archiviazione esterno ha un nome volume univoco.

Contenuti multimediali e grafica

Android 10 introduce le seguenti nuove funzionalità e API per contenuti multimediali e grafica:

Condivisione input audio

Android 10 consente a due app di condividere l'input audio contemporaneamente. Per informazioni complete, vedi Condividere l'input audio.

Acquisizione della riproduzione audio

Android 10 consente a un'app di acquisire la riproduzione audio da altre app. Per informazioni complete, consulta la sezione Acquisizione della riproduzione.

Seekbar nelle notifiche di MediaStyle

A partire da Android 10, nelle notifiche di MediaStyle viene visualizzata una barra di scorrimento. La barra di scorrimento mostra l'avanzamento della riproduzione da PlaybackState.getPosition() e, in alcuni casi, può essere utilizzata per scorrere fino a una posizione nel programma di riproduzione. L'aspetto e il comportamento della barra di scorrimento sono controllati dalle seguenti regole:

  • La barra di scorrimento viene visualizzata se è presente un MediaSession attivo e la sua durata (specificata da MediaMetadata.METADATA_KEY_DURATION) è maggiore di zero. Ciò significa che la barra non viene visualizzata per gli stream indeterminati come i live streaming e le trasmissioni radio.
  • Se la sessione implementa ACTION_SEEK_TO, l'utente può trascinare la barra di scorrimento per controllare il luogo di riproduzione.

API MIDI nativa

L'API MIDI nativa di Android (AMidi) offre agli sviluppatori di applicazioni la possibilità di inviare e ricevere dati MIDI con codice C/C++, integrando più strettamente la logica di controllo e audio C/C++ e riducendo al minimo la necessità di JNI.

Per ulteriori informazioni, vedi la sezione relativa all'API MIDI nativa di Android.

Miglioramenti a MediaCodecInfo

Android 10 aggiunge a MediaCodecInfo metodi che rivelano ulteriori informazioni su un codec.

Per ulteriori informazioni, consulta la sezione Codec multimediali.

API Thermal

Quando i dispositivi si scaldano troppo, potrebbero limitare la CPU e/o la GPU e questo può influire su app e giochi in modi imprevisti. I problemi sono più frequenti per le app che utilizzano grafica complessa, calcolo intensivo o attività di rete sostenuta, che possono variare da un dispositivo all'altro in base alla frequenza del chipset e del core, ai livelli di integrazione, alla pacchettizzazione del dispositivo e al fattore di forma.

In Android 10, le app e i giochi possono utilizzare un'API termica per monitorare i cambiamenti sul dispositivo e intervenire per mantenere un consumo energetico ridotto per ripristinare la normale temperatura. Le app registrano un listener in PowerManager, tramite il quale il sistema segnala lo stato termico in corso, che va da leggero e moderato a grave, critico, emergenza e arresto.

Quando il dispositivo segnala stress termico, le app e i giochi possono aiutare interrompendo le attività in corso per ridurre il consumo di energia in vari modi. Ad esempio, le app di streaming potrebbero ridurre risoluzione/velocità in bit o traffico di rete, un'app fotocamera potrebbe disattivare il flash o il miglioramento intensivo delle immagini, un gioco potrebbe ridurre la frequenza fotogrammi o la tassellazione dei poligoni, un'app multimediale potrebbe ridurre il volume degli altoparlanti e un'app per le mappe potrebbe disattivare il GPS.

L'API termica richiede un nuovo livello HAL per dispositivi. Attualmente, è supportata sui dispositivi Pixel con Android 10 e stiamo collaborando con i nostri partner produttori di dispositivi per offrire un'ampia assistenza all'ecosistema il più rapidamente possibile.

Fotocamera e immagini

Android 10 introduce le seguenti nuove funzionalità relative a fotocamera e immagini:

Supporto di fotocamere monocromatiche

Android 9 (livello API 28) ha introdotto per la prima volta la funzionalità della fotocamera monocromatica. Android 10 aggiunge diversi miglioramenti al supporto delle fotocamere monocromatiche:

  • Supporto del formato stream Y8 per migliorare l'efficienza della memoria.
  • Supporto per l'acquisizione DNG monocromatica non elaborata.
  • Introduzione delle enumerazioni CFA MONO e NIR per distinguere tra normali fotocamere monocromatiche e fotocamere a infrarossi.

Puoi usare questa funzionalità per acquisire un'immagine monocromatica nativa. Un dispositivo multicamera logico può utilizzare una videocamera monocromatica come fotocamera secondaria fisica per ottenere una migliore qualità delle immagini in condizioni di scarsa illuminazione.

Formato profondità dinamico

A partire da Android 10, le fotocamere possono archiviare i dati sulla profondità di un'immagine in un file separato, utilizzando un nuovo schema chiamato Dynamic Depth Format (DDF). Le app possono richiedere sia l'immagine JPG che i relativi metadati di profondità, utilizzando queste informazioni per applicare la sfocatura desiderata durante l'elaborazione, senza modificare i dati dell'immagine originale.

Per leggere le specifiche per questo formato, consulta Formato di profondità dinamico.

Formato file immagine ad alta efficienza

Il formato HEIF (High Efficiency Image File) è un formato standard di immagini e video che introduce una codifica di qualità superiore e dimensioni file inferiori rispetto ad altri formati file.

Per ulteriori informazioni sul formato file, consulta HEIC.

Miglioramenti della modalità multicamera

Android 10 migliora la fusione di più fotocamere in un'unica fotocamera logica, una funzionalità introdotta in Android 9 (livello API 28). I seguenti elementi sono stati aggiunti all'API Camera2:

API Accessibility Services

Android 10 introduce le seguenti nuove funzionalità e API del servizio di accessibilità:

Flag chiave di accesso AccessibilityNodeInfo

A partire da Android 10, puoi chiamare isTextEntryKey() per determinare se un determinato AccessibilityNodeInfo rappresenta un tasto di inserimento di testo che fa parte di una tastiera o di un tastierino.

Funzione di lettura vocale della finestra di dialogo Accessibilità

Nel caso in cui gli utenti debbano eseguire la scorciatoia di accessibilità per avviare un servizio di accessibilità, Android 10 consente di visualizzare la finestra di dialogo da un prompt di sintesi vocale se il servizio lo richiede.

Scorciatoia Accessibilità quando la navigazione tramite gesti è attiva

Quando la funzionalità di navigazione tramite gesti è abilitata in Android 10, il pulsante di accessibilità non è visibile o selezionabile. Per accedere al menu dei servizi di accessibilità, gli utenti devono eseguire uno dei seguenti gesti:

  • Scorri con due dita verso l'alto.
  • Scorri con due dita verso l'alto e tieni premuto.

Scorciatoia di accessibilità per le tastiere fisiche

In Android 10, gli utenti possono attivare la scorciatoia di accessibilità su una tastiera fisica premendo Ctrl+Alt+Z.

Miglioramento del controller della tastiera virtuale

In Android 10, i servizi di accessibilità possono richiedere la visualizzazione della tastiera software anche quando il dispositivo rileva una tastiera rigida collegata. Gli utenti possono ignorare questo comportamento.

Timeout dell'accessibilità definiti dall'utente

Android 10 introduce l'API getRecommendedTimeoutMillis(). Questo metodo fornisce supporto per timeout definiti dall'utente per elementi dell'interfaccia utente interattivi e non interattivi. Il valore restituito dipende sia dalle preferenze dell'utente sia dalle API dei servizi di accessibilità.

Miglioramenti alla compilazione automatica

Android 10 contiene i seguenti miglioramenti al servizio di compilazione automatica.

Richieste di compilazione automatica correlate alla compatibilità

Puoi utilizzare il flag FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST per determinare se è stata generata una richiesta di compilazione automatica tramite la modalità di compatibilità.

Salva nome utente e password contemporaneamente

Puoi supportare i casi in cui un'applicazione utilizza più attività per visualizzare nome utente, password e altri campi con il flag SaveInfo.FLAG_DELAY_SAVE.

Interazione dell'utente con l'interfaccia utente di salvataggio

Puoi mostrare e nascondere un campo per la password in una finestra di dialogo di salvataggio impostando un listener di azioni nella finestra di dialogo e modificando la visibilità della visualizzazione remota della password corrispondente.

Supporto per l'aggiornamento dei set di dati

La compilazione automatica può aggiornare le password esistenti. Ad esempio, se un utente ha già memorizzato una password e ne salva una nuova, la compilazione automatica gli chiede di aggiornare la password esistente anziché salvarne una nuova.

Miglioramenti alla classificazione dei campi

Android 10 contiene i seguenti miglioramenti all'API Field Classification.

Costruttore UserData.Builder

Il costruttore UserData.Builder è cambiato per allinearsi meglio al pattern Builder.

Consentire la mappatura di un valore a più tipi di ID categoria

Quando utilizzi UserData.Builder in Android 10, ora puoi mappare un valore a più tipi di ID categoria. Nelle versioni precedenti, è stata generata un'eccezione se un valore è stato aggiunto più di una volta.

Supporto migliorato per i numeri di carte di credito

La classificazione sul campo ora può rilevare i numeri di quattro cifre come le ultime quattro cifre di un numero di carta di credito.

Supporto per la classificazione dei campi specifici per le app

Android 10 aggiunge FillResponse.setUserData(), che consente di impostare dati utente specifici dell'app per l'intera durata della sessione. Ciò consente al servizio di compilazione automatica di rilevare i tipi di campi con contenuti specifici dell'app.

Controlli UI e di sistema

Android 10 offre i seguenti miglioramenti dell'interfaccia utente:

Supporta i limiti JVMTI PopFrame

Android 10 aggiunge il supporto per la funzionalità di can_pop_frames nell'implementazione di JVMTI per Android. Durante il debug, questa funzionalità consente di eseguire di nuovo le funzioni dopo essere state messe in pausa in un punto di interruzione e aver modificato i valori locali, globali o l'implementazione di una funzione. Per ulteriori informazioni, consulta la pagina di riferimento relativa ai frame pop di Oracle.

API Surface Control

Android 10 fornisce un'API SurfaceControl per l'accesso di basso livello al compositore di sistema (SurfaceFlinger). Per la maggior parte degli utenti, SurfaceView è il modo corretto per utilizzare il compositore. L'API SurfaceControl può essere utile in determinati casi, ad esempio:

  • Sincronizzazione di più piattaforme
  • Incorporamento della superficie cross-process
  • Gestione del lifetime dell'utente di livello inferiore

L'API SurfaceControl è disponibile nelle associazioni SDK e NDK. L'implementazione di NDK include un'API per lo scambio manuale dei buffer con il compositore. Questo fornisce un'alternativa per gli utenti che hanno riscontrato i limiti di BufferQueue.

Rilevamento del renderer sospeso di WebView

Android 10 introduce la classe astratta WebViewRenderProcessClient, che le app possono utilizzare per rilevare se un WebView non risponde. Per utilizzare questo corso:

  1. Definisci la tua sottoclasse e implementa i relativi metodi onRenderProcessResponsive() e onRenderProcessUnresponsive().
  2. Collega un'istanza di WebViewRenderProcessClient a uno o più oggetti WebView.
  3. Se WebView non risponde, il sistema chiama il metodo onRenderProcessUnresponsive() del client, trasmettendo WebView e WebViewRenderProcess. Se WebView è a processo singolo, il parametro WebViewRenderProcess è nullo. L'app può intraprendere l'azione appropriata, ad esempio mostrare all'utente una finestra di dialogo che chiede se vuole interrompere il processo di rendering.

Se WebView continua a non rispondere, il sistema chiama onRenderProcessUnresponsive() periodicamente (non più di una volta ogni cinque secondi), ma non esegue altre azioni. Se WebView torna di nuovo reattivo, il sistema chiama onRenderProcessResponsive() una sola volta.

Riquadri delle impostazioni

Android 10 introduce i pannelli delle impostazioni, un'API che consente alle app di mostrare le impostazioni agli utenti nel contesto dell'app. In questo modo, gli utenti non devono accedere alle Impostazioni per modificare elementi quali NFC o Dati mobili al fine di utilizzare l'app.

Figura 1. L'utente tenta di aprire una pagina web mentre il dispositivo non è connesso alla rete. Chrome apre il riquadro delle impostazioni Connettività internet...

Figura 2. L'utente può attivare il Wi-Fi e selezionare una rete senza uscire dall'app Chrome.

Ad esempio, supponiamo che un utente apra un browser web mentre il suo dispositivo è in modalità aereo. Prima di Android 10, l'app poteva mostrare solo un messaggio generico che chiedeva all'utente di aprire le Impostazioni per ripristinare la connettività. Con Android 10, l'app browser può visualizzare un riquadro incorporato che mostra le principali impostazioni di connettività come la modalità aereo, il Wi-Fi (incluse le reti nelle vicinanze) e i dati mobili. Con questo riquadro, gli utenti possono ripristinare la connettività senza uscire dall'app.

Per visualizzare un riquadro delle impostazioni, attiva un intent con una delle seguenti azioni Settings.Panel:

Kotlin

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

Java

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type può essere uno dei seguenti:

ACTION_INTERNET_CONNECTIVITY
Mostra le impostazioni relative alla connessione a internet, ad esempio modalità aereo, Wi-Fi e dati mobili.
ACTION_WIFI
Mostra le impostazioni Wi-Fi, ma non le altre impostazioni di connettività. Questa opzione è utile per le app che richiedono una connessione Wi-Fi per eseguire caricamenti o download di grandi dimensioni.
ACTION_NFC
Mostra tutte le impostazioni relative alla tecnologia Near Field Communication (NFC).
ACTION_VOLUME
Mostra le impostazioni del volume per tutti gli stream audio.

Miglioramenti alla condivisione

Android 10 offre una serie di miglioramenti alla condivisione:

API Share Shortcuts

L'APISharing Shortcuts sostituisce le API Direct Share.

Anziché recuperare i risultati in modo reattivo on demand, l'API Share Shortcuts consente alle app di pubblicare in anticipo target di condivisione diretta. Ecco come funziona ShortcutManager. Poiché le due API sono simili, abbiamo ampliato l'API ShortcutInfo per semplificare l'utilizzo di entrambe le funzionalità. Con l'API Sharing Shortcuts, puoi assegnare direttamente categorie o persone a una destinazione di condivisione. Le destinazioni di condivisione rimangono nel sistema finché la stessa app non le aggiorna o l'app non viene disinstallata.

Il vecchio meccanismo di Condivisione diretta continua a funzionare, ma le app che lo utilizzano hanno una priorità inferiore rispetto alle app che utilizzano l'API Share Shortcuts.

ShortcutInfo.Builder aggiunge e migliora metodi per fornire ulteriori informazioni sul target della condivisione.

Target della quota diretta

Puoi pubblicare una scorciatoia dinamica come target di condivisione diretta. Consulta Pubblicare target di condivisione diretta.

ShortcutManagerCompat è una nuova API AndroidX che offre compatibilità con le versioni precedenti dell'API DirectShare. Questo è il modo migliore per pubblicare le destinazioni delle condivisioni.

Anteprima del testo

Quando un'app condivide contenuti di testo, può mostrare un'anteprima facoltativa dei contenuti nell'interfaccia utente di Sharesheet.

Consulta la sezione Aggiungere anteprime RTF

Scopri di più

Per ulteriori informazioni sulla modalità di condivisione dei dati da parte delle app, vedi Invio di dati semplici ad altre app e Ricezione di dati semplici da altre app

Tema scuro

Android 10 offre un tema scuro che si applica sia all'UI del sistema Android sia alle app in esecuzione sul dispositivo. Per informazioni complete, consulta la pagina Tema scuro.

Tipi di servizi in primo piano

Android 10 introduce l'attributo manifest XML foregroundServiceType, che viene incluso nella definizione di diversi servizi specifici. È possibile, sebbene raramente appropriato, assegnare più tipi di servizi in primo piano a un particolare servizio.

La tabella seguente mostra i diversi tipi di servizi in primo piano e i servizi in cui è appropriato dichiarare un tipo specifico:

Tipo di servizio in primo piano Caso d'uso di esempio per un servizio che deve dichiarare questo tipo
connectedDevice Monitorare un tracker per il fitness indossabile
dataSync Download di file da una rete
location Continuare un'azione avviata dall'utente
mediaPlayback Riprodurre un audiolibro, un podcast o della musica
mediaProjection Registra un video del display del dispositivo in un breve periodo di tempo
phoneCall Gestire la telefonata in corso

Kotlin

Android 10 include i seguenti aggiornamenti per lo sviluppo di Kotlin.

Annotazioni di nullità per le API libcore

Android 10 migliora la copertura delle annotazioni con supporto di valori null nell'SDK per le API libcore. Queste annotazioni consentono agli sviluppatori di app che utilizzano l'analisi dei valori NULL di Kotlin o Java in Android Studio di ottenere informazioni sui valori di nullità quando interagiscono con queste API.

Normalmente, le violazioni dei contratti con valori nulli in Kotlin comportano errori di compilazione. Per garantire la compatibilità con il codice esistente, vengono aggiunte solo le annotazioni @RecentlyNullable e @RecentlyNonNull. Ciò significa che le violazioni dei valori NULL comportano l'invio di avvisi anziché di errori.

Inoltre, tutte le annotazioni @RecentlyNullable o @RecentlyNonNull aggiunte in Android 9 verranno modificate, rispettivamente, in @Nullable e @NonNull. Ciò significa che, in Android 10 e versioni successive, le violazioni dei valori nulli portano a errori anziché ad avvisi.

Per maggiori informazioni sulle modifiche delle annotazioni, consulta la pagina Android Pie SDK is now more Kotlin-friendly sul Blog per sviluppatori Android.

ND

Android 10 include le seguenti modifiche relative all'NDK.

Miglioramento del debug della proprietà del descrittore dei file

Android 10 aggiunge fdsan, che consente di trovare e risolvere più facilmente i problemi di proprietà dei descrittori dei file.

I bug correlati a un'errata gestione della proprietà del descrittore dei file, che tendono a manifestarsi come use-after-close e double-close, sono analoghi ai bug di allocazione della memoria use-after-free e double-free, ma tendono a essere molto più difficili da diagnosticare e correggere. fdsan tenta di rilevare e/o impedire l'errata gestione del descrittore dei file applicando il descrittore del file.

Per ulteriori informazioni sugli arresti anomali relativi a questi problemi, consulta Errore rilevato da fdsan. Per ulteriori informazioni su fdsan, consulta la pagina di Googlesource relativa a fdsan.

TLS ELF

Le applicazioni create utilizzando NDK con un livello API minimo 29 possono utilizzare TLS ELF anziché emutls. È stato aggiunto il supporto di un linker dinamico e statico per supportare questo metodo di gestione delle variabili locali dei thread.

Per le app create per il livello API 28 e versioni precedenti, sono stati implementati alcuni miglioramenti per libgcc/compiler-rt al fine di aggirare alcuni problemi relativi a emutls.

Per maggiori informazioni, vedi Modifiche Android per gli sviluppatori NDK.

Tempo di esecuzione

Android 10 include la seguente modifica del runtime.

Attivazione della garbage collection basata su Mallinfo

Quando gli oggetti Java di piccole piattaforme fanno riferimento a oggetti enormi nell'heap C++, gli oggetti C++ possono spesso essere recuperati solo quando l'oggetto Java viene raccolto e, ad esempio, finalizzato. Nelle versioni precedenti, la piattaforma aveva stimato le dimensioni di molti oggetti C++ associati agli oggetti Java. Questa stima non era sempre precisa e a volte causava un notevole aumento dell'utilizzo della memoria, in quanto la piattaforma non riusciva a eseguire la garbage collection quando avrebbe dovuto.

In Android 10, il garbage collector (GC) monitora la dimensione totale dell'heap allocato dal sistema malloc(), assicurando che le allocazioni di malloc() di grandi dimensioni siano sempre incluse nei calcoli di attivazione di GC. Se le app interpretano un numero elevato di allocazioni C++ con l'esecuzione di Java, potrebbe verificarsi un aumento della frequenza di garbage collection. Altre app potrebbero notare una piccola diminuzione.

Test e debug

Android 10 include i seguenti miglioramenti per i test e il debug.

Miglioramenti al tracciamento del sistema sul dispositivo

A partire da Android 10, puoi specificare i limiti per le dimensioni e la durata di una traccia quando esegui una tracce di sistema sul dispositivo. Quando specifichi uno dei due valori, il sistema esegue una traccia lunga, copiando periodicamente il buffer di traccia nel file di destinazione durante la registrazione della traccia. L'analisi viene completata quando vengono raggiunti i limiti di dimensione o durata specificati.

Utilizza questi parametri aggiuntivi per testare casi d'uso diversi rispetto a quelli con una traccia standard. Ad esempio, potresti diagnosticare un bug relativo alle prestazioni che si verifica solo dopo che l'app è in esecuzione per un lungo periodo di tempo. In questo caso, potresti registrare una lunga traccia di un'intera giornata e quindi analizzare lo scheduler della CPU, l'attività del disco, i thread dell'app e altri dati nel report per determinare la causa del bug.

In Android 10 e versioni successive, i file di traccia vengono salvati in un formato che può essere aperto con Perfetto, un progetto open source per la strumentazione delle prestazioni e il tracciamento. Puoi convertire i file di traccia di Perfetto nel formato Systrace.

Miglioramenti a TextClassifier

Android 10 fornisce ulteriori funzionalità di classificazione del testo nell'interfaccia TextClassifier.

Rilevamento della lingua

Il metodo detectLanguage() funziona in modo simile ai metodi di classificazione esistenti. Riceve un oggetto TextLanguage.Request e restituisce un oggetto TextLanguage.

Gli oggetti TextLanguage sono costituiti da un elenco di coppie ordinate. Ogni coppia contiene un'impostazione internazionale e un punteggio di confidenza corrispondente per la classificazione.

Azioni suggerite per la conversazione

Il metodo suggestConversationActions() funziona in modo simile ai metodi di classificazione esistenti. Riceve un oggetto ConversationActions.Request e restituisce un oggetto ConversationActions.

ConversationActions sono costituiti da un elenco di oggetti ConversationAction. Ogni oggetto ConversationAction include una potenziale azione suggerita e il relativo punteggio di affidabilità.

Risposte/azioni rapide nelle notifiche

Android 9 ha introdotto la possibilità di visualizzare le risposte suggerite all'interno di una notifica. Android 10 amplia questo aspetto con la possibilità di includere le azioni suggerite basate sull'intenzione. Inoltre, la piattaforma può generare questi suggerimenti automaticamente. Le app possono comunque fornire suggerimenti o disattivare i suggerimenti generati dal sistema.

L'API utilizzata per generare queste risposte fa parte di TextClassifier ed è stata inoltre esposta direttamente agli sviluppatori in Android 10. Per ulteriori informazioni, leggi la sezione sui miglioramenti di TextClassifier.

Se la tua app fornisce suggerimenti personalizzati, la piattaforma non genera suggerimenti automatici. Se non vuoi che nelle notifiche dell'app vengano visualizzate risposte o azioni suggerite, puoi disattivare le risposte e le azioni generate dal sistema utilizzando setAllowGeneratedReplies() e setAllowSystemGeneratedContextualActions().