Funzionalità e API di Android 10

Android 10 introduce fantastiche funzionalità per utenti e sviluppatori. Questo documento illustra ciò che è disponibile per gli sviluppatori.

Per saperne di più sulle API, leggi il report Differenze API o consulta il riferimento API Android: cerca le API che sono state "aggiunte nel livello API 29". Inoltre, assicurati di verificare 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 scoprire le aree in cui le modifiche alla piattaforma potrebbero influire sulle tue app.

Miglioramenti alla sicurezza

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

Migliori finestre di dialogo per l'autenticazione biometrica

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 è in grado di autenticarsi tramite l'input biometrico.
  • Suggerimento che indica al sistema di non richiedere la conferma dell'utente dopo che l'utente si è autenticato utilizzando una modalità biometrica implicita. Ad esempio, potresti dire al sistema che non devono essere necessarie ulteriori conferme dopo che un utente ha eseguito l'autenticazione utilizzando l'autenticazione facciale.

Esegui codice DEX incorporato direttamente dall'APK

A partire da Android 10, puoi indicare alla piattaforma di eseguire il codice DEX incorporato direttamente dal file APK dell'app. Questa opzione consente di prevenire un attacco nel caso in cui un utente malintenzionato sia riuscito a manomettere il codice compilato localmente sul dispositivo.

Per maggiori informazioni, consulta Eseguire 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 maggiori dettagli sulla nostra implementazione di TLS 1.3, consulta la sezione relativa a TLS nella pagina relativa alle 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 nelle 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 sulle istanze di javax.net.ssl.SSLSocket può utilizzare invece i metodi di SSLSockets.

Funzionalità di connettività

Android 10 include diversi miglioramenti relativi a networking e connettività.

API Wi-Fi network connection

Android 10 aggiunge il supporto per le connessioni peer-to-peer, Questa funzionalità consente alla tua app di richiedere 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 è utilizzata per scopi non correlati alla rete, ad esempio per configurare il bootstrap per dispositivi secondari come Chromecast e l'hardware Google Home.

Per ulteriori informazioni, consulta la pagina relativa all'API Wi-Fi Network Request per la connettività peer-to-peer.

API suggerimento rete Wi-Fi

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

Per ulteriori informazioni su questa funzionalità, vedi Suggerimento per il Wi-Fi.

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

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

Android 10 estende l'API di blocco Wi-Fi per supportare in modo efficace la modalità ad alte prestazioni e la modalità a bassa latenza. Il risparmio energetico del Wi-Fi è disattivato per la modalità ad alte prestazioni e a bassa latenza, ed è possibile che in modalità a bassa latenza sia attivata un'ulteriore ottimizzazione della latenza, in base al supporto del modem.

La modalità a bassa latenza viene attivata solo 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 le ricerche DNS specializzate, utilizzando sia ricerche in chiaro sia la modalità DNS-over-TLS. In precedenza, il resolver 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 fornisce una risoluzione generica e asincrona, che ti consente di cercare SRV, NAPTR e altri tipi di record. Tieni presente che l'analisi della risposta viene lasciata all'app per l'esecuzione.

Per le app basate su NDK, vedi android_res_nsend.

Connessione facile Wi-Fi

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

Per ulteriori informazioni su questa funzionalità, consulta Wi-Fi Easy Connect.

API Wi-Fi Direct connection

Le classi API WifiP2pConfig e WifiP2pManager hanno aggiornamenti in Android 10 per supportare le funzionalità di connessione veloce a Wi-Fi Direct utilizzando informazioni predeterminate. Queste informazioni vengono condivise tramite un canale secondario, ad esempio 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 Bluetooth LE (Connessione orientata alla connessione)

Android 10 consente alla tua app di utilizzare connessioni BLE CoC per trasferire flussi di dati più grandi tra due dispositivi BLE. Questa interfaccia astrae le meccaniche di Bluetooth e connettività per semplificarne l'implementazione.

Funzionalità di telefonia

Android 10 include diversi miglioramenti relativi alla telefonia.

Miglioramenti della qualità delle chiamate

Android 10 aggiunge la possibilità di raccogliere informazioni sulla qualità delle chiamate in corso di sottosistema IP Multimediale (IMS), inclusa la qualità da e verso la rete, sui dispositivi che supportano questa funzionalità.

Filtro delle chiamate e ID chiamante

Android 10 offre alla tua app un mezzo per identificare le chiamate non presenti nella rubrica dell'utente come potenziali chiamate indesiderate e per far sì 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 mancanti. L'utilizzo di questa API elimina il requisito di ottenere all'utente le autorizzazioni 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 e viene sostituita dall'API CallRedirectionService. L'API CallRedirectionService fornisce interfacce per modificare le chiamate in uscita effettuate dalla piattaforma Android. Ad esempio, le applicazioni di terze parti potrebbero annullare le chiamate e reindirizzarle tramite VoIP.

Miglioramenti alla creazione di file su unità di archiviazione esterna

Oltre ad introdurre l'archiviazione basata su ambito, Android 10 aggiunge le seguenti funzionalità relative all'archiviazione esterna:

Contenuti multimediali e grafica

Android 10 introduce le seguenti nuove API e funzionalità multimediali e grafiche:

Condivisione dell'input audio in corso...

Android 10 aggiunge la possibilità per due app di condividere l'input audio contemporaneamente. Per informazioni complete, vedi Condivisione dell'input audio.

Acquisizione riproduzione audio

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

Seekbar nelle notifiche di MediaStyle

A partire da Android 10, le notifiche di MediaStyle mostrano una barra di scorrimento. La barra di scorrimento mostra l'avanzamento della riproduzione da PlaybackState.getPosition() e, in alcuni casi, può essere utilizzata per cercare una posizione all'interno del programma di riproduzione. L'aspetto e il comportamento della barra di scorrimento sono controllati da queste regole:

  • La barra di ricerca viene visualizzata se è presente un elemento MediaSession attivo e la sua durata (specificata da MediaMetadata.METADATA_KEY_DURATION) è maggiore di zero. Ciò significa che la barra non compare 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 Android Native MIDI (AMidi) offre agli sviluppatori di applicazioni la possibilità di inviare e ricevere dati MIDI con codice C/C++, integrandosi meglio con la logica di controllo audio/controllo C/C++ e riducendo al minimo la necessità di utilizzare JNI.

Per maggiori informazioni, vedi la pagina sull'API Android Native MIDI.

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

Se i dispositivi si scaldano troppo, possono limitare la CPU e/o la GPU, con ripercussioni su app e giochi in modi imprevisti. Le app che utilizzano grafica complessa, elaborazione intensiva o attività di rete prolungata hanno maggiori probabilità di incorrere in problemi, che possono variare da un dispositivo all'altro in base alle frequenze di chipset e di base, ai livelli di integrazione, nonché alla pacchettizzazione e al fattore di forma del dispositivo.

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

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

L'API termica richiede un nuovo livello HAL per i dispositivi: attualmente è supportato sui dispositivi Pixel con Android 10 e stiamo collaborando con i nostri partner produttori per offrire un ampio supporto all'ecosistema il più rapidamente possibile.

Fotocamera e immagini

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

Supporto per 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 dello stream Y8 per migliorare l'efficienza della memoria.
  • Supporto per l'acquisizione DNG non elaborata e monocromatica.
  • Introduzione delle enumerazioni CFA MONO e NIR per distinguere tra videocamere monocromatiche normali e fotocamere a infrarossi vicini.

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

Formato di profondità dinamico

A partire da Android 10, le videocamere 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 sia i relativi metadati di profondità, utilizzando queste informazioni per applicare l'eventuale sfocatura desiderata durante la post-elaborazione senza modificare i dati dell'immagine originali.

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

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 minori rispetto ad altri formati di file.

Per ulteriori informazioni sul formato file, consulta HEIC.

Miglioramenti in modalità multicamera

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

API Accessibility Services

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

Flag della chiave di accesso AccessibilityNodeInfo

A partire da Android 10, puoi chiamare isTextEntryKey() per stabilire se un determinato AccessibilityNodeInfo rappresenta un tasto di accesso 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 utilizzare la scorciatoia di accessibilità per avviare un servizio di accessibilità, Android 10 consente alla finestra di dialogo di essere accompagnata da una richiesta di sintesi vocale, se il servizio lo richiede.

Scorciatoia di accessibilità quando la navigazione tramite gesti è attiva

Quando la funzionalità di navigazione tramite gesti è attiva in Android 10, il pulsante 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 temporanea

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à definita dall'utente

Android 10 introduce l'API getRecommendedTimeoutMillis(). Questo metodo fornisce supporto per i timeout definiti dall'utente per elementi UI interattivi e non interattivi. Il valore restituito è influenzato sia dalle preferenze dell'utente sia dalle API del servizio 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 una richiesta di compilazione automatica è stata generata tramite la modalità di compatibilità.

Salva nome utente e password contemporaneamente

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

Interazione dell'utente con l'interfaccia utente di salvataggio

Puoi mostrare e nascondere un campo della 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 funzionalità di compilazione automatica chiede all'utente 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 è stato modificato per allinearsi meglio al modello Builder.

Consenti 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 release precedenti, veniva generata un'eccezione se un valore veniva aggiunto più di una volta.

Supporto migliorato per i numeri di carte di credito

La classificazione dei campi ora può rilevare numeri di quattro cifre come le ultime quattro cifre di un numero di carta di credito.

Supporto per la classificazione di campi specifici per app

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

Controlli di interfaccia utente e di sistema

Android 10 offre i seguenti miglioramenti all'interfaccia utente:

Supporta i limiti JVMTI PopFrame

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

API Surface Control

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

  • Sincronizzazione di più piattaforme
  • Incorporamento delle superfici tra processi
  • Gestione di livello inferiore del ciclo di vita

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

Rilevamento del renderer bloccato di WebView

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

  1. Definisci la tua sottoclasse e implementa i relativi metodi onRenderProcessResponsive() e onRenderProcessUnresponsive().
  2. Associa 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). La tua app può intraprendere le azioni appropriate, ad esempio mostrare una finestra di dialogo all'utente che chiede se vuole interrompere il processo di rendering.

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

Riquadri delle impostazioni

Android 10 introduce i Riquadri delle impostazioni, un'API che consente alle app di mostrare le impostazioni agli utenti nel contesto della loro app. In questo modo, gli utenti non devono accedere alle Impostazioni per modificare dati quali NFC o Dati mobili per 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 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ò mostrare un riquadro in linea 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 connettività 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à. È 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 Sharing Scorciatoias

L'API Sharing Scorciatoie sostituisce le API Direct Share.

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

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

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

Target di condivisione diretta

Puoi pubblicare una scorciatoia dinamica come target della condivisione diretta. Consulta Pubblicare target per la condivisione diretta.

ShortcutManagerCompat è una nuova API AndroidX che fornisce compatibilità con le versioni precedenti dell'API DirectShare. Questo è il modo migliore per pubblicare i target di condivisione.

Anteprima del testo

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

Consulta la sezione Aggiungere anteprime RTF

Scopri di più

Per ulteriori informazioni su come le app possono condividere dati, vedi Inviare dati semplici ad altre app e Ricevere dati semplici da altre app

Tema scuro

Android 10 offre un tema scuro che si applica sia all'interfaccia utente del sistema Android che alle app in esecuzione sul dispositivo. Per informazioni complete, vedi Tema scuro.

Tipi di servizi in primo piano

Android 10 introduce l'attributo manifest XML foregroundServiceType, che puoi includere nella definizione di vari servizi specifici. È possibile, anche se raramente appropriato, assegnare più tipi di servizi in primo piano a un servizio specifico.

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

Tipo di servizio in primo piano Esempio di caso d'uso per un servizio che deve dichiarare questo tipo
connectedDevice Monitorare un tracker per il fitness indossabile
dataSync Scaricare 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 per un breve periodo di tempo
phoneCall Gestire la telefonata in corso

Kotlin

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

Annotazioni null per le API libcore

Android 10 migliora la copertura delle annotazioni con supporto nulla nell'SDK per le API libcore. Queste annotazioni consentono agli sviluppatori di app che usano l'analisi della nullabilità di Kotlin o Java in Android Studio di ottenere informazioni sull'nullità quando interagiscono con queste API.

Normalmente, le violazioni dei contratti con supporto nulla in Kotlin generano errori di compilazione. Per garantire la compatibilità con il codice esistente, vengono aggiunte solo le annotazioni @RecentlyNullable e @RecentlyNonNull. Ciò significa che le violazioni delle norme sui valori non generano avvisi anziché 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 relative a valori nulli generano errori anziché avvisi.

Per ulteriori informazioni sulle modifiche alle annotazioni, consulta la pagina relativa all'SDK Android Pie ora è più compatibile con Kotlin sull'Android Developers Blog.

NDK

Android 10 include le seguenti modifiche NDK.

Debug migliorato della proprietà dei descrittori del file

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

I bug relativi alla gestione errata della proprietà dei descrittori dei file, che tendono a manifestarsi come use-after-close e Double-close, sono analoghi ai bug relativi all'allocazione della memoria use-after-free e Double-free, ma tendono a essere molto più difficili da diagnosticare e risolvere. fdsan tenta di rilevare e/o prevenire la cattiva gestione del descrittore di file.

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

TLS ELF

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

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

Per maggiori informazioni, consulta Modifiche relative ad Android per gli sviluppatori NDK.

Durata

Android 10 include la seguente modifica del runtime.

Attivazione della garbage collection di Mallinfo

Quando gli oggetti Java di piccole piattaforme fanno riferimento a oggetti enormi nell'heap di C++, spesso gli oggetti C++ possono essere recuperati solo quando l'oggetto Java viene raccolto e, ad esempio, finalizzato. Nelle release precedenti, la piattaforma stimava le dimensioni di molti oggetti C++ associati agli oggetti Java. Questa stima non era sempre accurata e occasionalmente comportava un notevole aumento dell'utilizzo della memoria, in quanto la piattaforma non è riuscita 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(), garantendo che le grandi allocazioni malloc() vengano sempre incluse nei calcoli che attivano GC. Di conseguenza, le app che interagiscono con un numero elevato di allocazioni C++ con l'esecuzione di Java potrebbero registrare un aumento della frequenza di garbage collection. Le altre app potrebbero registrare una piccola diminuzione.

Test e debug

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

Miglioramenti relativi al tracciamento del sistema sul dispositivo

A partire da Android 10, puoi specificare limiti per le dimensioni e la durata di una traccia quando esegui una analisi del sistema sul dispositivo. Quando specifichi uno dei due valori, il sistema esegue una lunga traccia, copiando periodicamente il buffer della traccia nel file di destinazione mentre la traccia viene registrata. La traccia 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 che testeresti con una traccia standard. Ad esempio, potresti diagnosticare un bug delle prestazioni che si verifica solo dopo che l'app è stata in esecuzione per un lungo periodo di tempo. In questo caso, potresti registrare una lunga traccia durante un'intera giornata e poi analizzare lo scheduler della CPU, l'attività del disco, i thread delle 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 e il tracciamento delle prestazioni. Puoi convertire i file di traccia Perfetto nel formato Systrace.

Miglioramenti a TextClassifier

Android 10 fornisce funzionalità aggiuntive 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.

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

Azioni per le conversazioni suggerite

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

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

Risposte rapide/azioni nelle notifiche

Android 9 ha introdotto la possibilità di visualizzare le risposte suggerite all'interno di una notifica. Android 10 offre anche la possibilità di includere le azioni suggerite basate sull'intenzione. Inoltre, la piattaforma è in grado di generare automaticamente questi suggerimenti. Le app possono comunque fornire i propri suggerimenti o disattivare i suggerimenti generati dal sistema.

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

Se la tua app fornisce i propri suggerimenti, la piattaforma non genera alcun suggerimenti automatico. 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().