Funzionalità e API di Android 10

Android 10 introduce funzionalità e capacità eccezionali per utenti e sviluppatori. Questo documento evidenzia ciò che è disponibile per gli sviluppatori.

Per scoprire di più sulle API, leggi il report sulle differenze tra le API o visita la documentazione di riferimento delle API Android. Cerca le API "aggiunte nel livello API 29". Assicurati inoltre di consultare 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, che vengono riepilogate 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 fallback che consente a un utente di autenticarsi utilizzando il PIN, la sequenza o la password del dispositivo se non riesce ad autenticarsi utilizzando l'input biometrico.
  • Un suggerimento che indica al sistema di non richiedere la conferma dell'utente dopo che l'utente ha eseguito l'autenticazione utilizzando una modalità biometrica implicita. Ad esempio, potresti comunicare al sistema che non è necessaria un'ulteriore conferma dopo che un utente si è autenticato utilizzando l'autenticazione del volto.

Esegui il 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 della tua app. Questa opzione può contribuire a prevenire un attacco se un malintenzionato è riuscito a manomettere il codice compilato localmente 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 è una revisione importante dello standard TLS che include vantaggi in termini di prestazioni e maggiore sicurezza. 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 Modifiche al comportamento per tutte le app.

API Conscrypt pubblica

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 il plurale della classe javax.net.ssl corrispondente. Ad esempio, il codice che opera su istanze di javax.net.ssl.SSLSocket può invece utilizzare metodi di SSLSockets.

Funzionalità di connettività

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

API di connessione di rete Wi-Fi

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

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

API per il suggerimento di reti Wi-Fi

Android 10 aggiunge il supporto per la tua app per chiedere all'utente di connettersi a un punto di accesso Wi-Fi. Puoi fornire suggerimenti sulla rete a cui connetterti. La piattaforma sceglierà in definitiva quale punto di accesso accettare in base all'input tuo e di altre app.

Per saperne di più su questa funzionalità, consulta Suggerimento Wi-Fi.

Miglioramenti alle modalità Wi-Fi ad alte prestazioni e a 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 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 e, a seconda del supporto del modem, potrebbe essere abilitata un'ulteriore ottimizzazione della latenza in modalità a bassa latenza.

La modalità a bassa latenza è attiva 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 le ricerche in testo normale 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, consentendoti di cercare SRV, NAPTR e altri tipi di record. Tieni presente che l'analisi della risposta viene eseguita dall'app.

Per le app basate su NDK, vedi android_res_nsend.

Wi-Fi Easy Connect

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 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 di connessione Wi-Fi Direct

Le classi API WifiP2pConfig e WifiP2pManager sono state aggiornate in Android 10 per supportare funzionalità di connessione rapida 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 partecipare 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 (CoC) Bluetooth LE

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 il Bluetooth e i meccanismi di connettività per semplificare 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 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 offre alla tua app un modo per identificare le chiamate non presenti nella rubrica dell'utente come potenziali chiamate spam e per far sì che le chiamate spam vengano rifiutate automaticamente per conto dell'utente. Le informazioni su queste chiamate bloccate vengono registrate come chiamate bloccate nel registro chiamate per fornire maggiore trasparenza all'utente quando non riceve chiamate. L'utilizzo di questa API elimina il requisito di ottenere le autorizzazioni READ_CALL_LOG dall'utente per fornire la funzionalità di filtro chiamate e ID chiamante.

API del servizio di reindirizzamento delle chiamate

Android 10 modifica la modalità di gestione degli intent di chiamata. La trasmissione NEW_OUTGOING_CALL è deprecata ed è stata 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 spazio di archiviazione esterno

Oltre a introdurre l'archiviazione mirata, Android 10 aggiunge le seguenti funzionalità relative all'archiviazione esterna:

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

Media e grafica

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

Condivisione dell'input audio

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

Acquisizione della riproduzione audio

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

Barra di ricerca nelle notifiche MediaStyle

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

  • La barra di ricerca 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 radiofoniche.
  • Se la sessione implementa ACTION_SEEK_TO, l'utente può trascinare la barra di ricerca per controllare la posizione di riproduzione.

API MIDI nativa

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

Per maggiori informazioni, consulta la pagina API Android Native MIDI.

Miglioramenti di MediaCodecInfo

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

Per ulteriori informazioni, consulta Codec multimediali.

API Thermal

Quando i dispositivi si surriscaldano troppo, potrebbero limitare la CPU e/o la GPU, il che può influire su app e giochi in modi inaspettati. Le app che utilizzano grafica complessa, calcoli pesanti o attività di rete sostenute hanno maggiori probabilità di riscontrare problemi e questi possono variare a seconda dei dispositivi in base al chipset e alle frequenze dei core, ai livelli di integrazione, nonché al packaging e al fattore di forma del dispositivo.

In Android 10, app e giochi possono utilizzare un'API termica per monitorare le modifiche sul dispositivo e intervenire per mantenere un consumo energetico inferiore e ripristinare la temperatura normale. 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, di emergenza e di spegnimento.

Quando il dispositivo segnala stress termico, app e giochi possono contribuire a ridurre le attività in corso per ridurre il consumo energetico in vari modi. Ad esempio, le app di streaming potrebbero ridurre la risoluzione/il bit rate o il traffico di rete, un'app fotocamera potrebbe disattivare il flash o il miglioramento intensivo delle immagini, un gioco potrebbe ridurre il frame rate o la tassellatura dei poligoni, un'app multimediale potrebbe ridurre il volume degli altoparlanti e un'app di mappe potrebbe disattivare il GPS.

L'API termica richiede un nuovo livello HAL del dispositivo. Al momento è supportata sui dispositivi Pixel con Android 10 e stiamo collaborando con i nostri partner produttori di dispositivi per estendere il supporto all'ecosistema il più rapidamente possibile.

Fotocamera e immagini

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

Supporto della videocamera monocromatica

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

  • Supporto del formato di flusso Y8 per migliorare l'efficienza della memoria.
  • Supporto dell'acquisizione DNG raw monocromatica.
  • Introduzione delle enumerazioni MONO e NIR CFA per distinguere tra la normale videocamera monocromatica e le videocamere a infrarossi vicini.

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

Formato di profondità dinamica

A partire da Android 10, le fotocamere possono archiviare i dati di 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 la sfocatura desiderata in post-elaborazione senza modificare i dati dell'immagine originale.

Per leggere la specifica di questo formato, vedi Formato profondità dinamica.

Formato file immagine ad alta efficienza

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

Per ulteriori informazioni sul formato del file, vedi HEIC.

Miglioramenti nella modalità multicamera

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

API dei servizi di accessibilità

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

Flag della chiave di accesso di 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 accompagnare la finestra di dialogo con un prompt di sintesi vocale se il servizio lo richiede.

Scorciatoia di accessibilità quando è abilitata la navigazione tramite gesti

Quando la funzionalità navigazione tramite gesti è attivata 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 verso l'alto con due dita.
  • Scorri verso l'alto con due dita 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 su schermo

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

Timeout di accessibilità definiti dall'utente

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

Miglioramenti della compilazione automatica

Android 10 include 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à.

Salvare nome utente e password contemporaneamente

Puoi supportare i casi in cui un'applicazione utilizza più attività per visualizzare nome utente, 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 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, il riempimento automatico chiede all'utente di aggiornare la password esistente anziché salvarne una nuova.

Miglioramenti alla classificazione dei campi

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

Costruttore UserData.Builder

Il costruttore UserData.Builder è stato modificato per essere più in linea con il pattern Builder.

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

Supporto migliorato per i numeri di carta di credito

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

Supporto della classificazione dei campi specifica per le app

Android 10 aggiunge FillResponse.setUserData(), che ti consente di impostare dati utente specifici per l'app per la durata della sessione. In questo modo, il servizio di compilazione automatica rileva i tipi per i campi con contenuti specifici dell'app.

Controlli di sistema e dell'interfaccia utente

Android 10 offre i seguenti miglioramenti dell'interfaccia utente:

Supporto dei limiti di PopFrame JVMTI

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

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 sfruttare il compositore. L'API SurfaceControl può essere utile in alcuni casi, ad esempio:

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

L'API SurfaceControl è disponibile sia nell'SDK che nei binding NDK. L'implementazione dell'NDK include un'API per lo scambio manuale di buffer con il compositor. In questo modo, gli utenti che hanno raggiunto i limiti di BufferQueue hanno un'alternativa.

Rilevamento del renderer bloccato di WebView

Android 10 introduce la WebViewRenderProcessClient classe astratta, che le app possono utilizzare per rilevare se un WebView ha smesso di rispondere. Per utilizzare questa classe:

  1. Definisci la tua sottoclasse e implementa i metodi onRenderProcessResponsive() e onRenderProcessUnresponsive().
  2. Collega un'istanza del tuo WebViewRenderProcessClient a uno o più oggetti WebView.
  3. Se WebView non risponde, il sistema chiama il metodo onRenderProcessUnresponsive() del client, passando WebView e WebViewRenderProcess. (Se WebView è a processo singolo, il parametro WebViewRenderProcess è null.) La tua app può intraprendere l'azione appropriata, ad esempio mostrare una finestra di dialogo all'utente per chiedergli 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 intraprende altre azioni. Se WebView torna a rispondere, il sistema chiama onRenderProcessResponsive() una sola volta.

Pannelli delle impostazioni

Android 10 introduce i pannelli 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 elementi come 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 visualizza il pannello 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 visualizzare 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 in linea che mostra le impostazioni di connettività principali come la modalità aereo, il Wi-Fi (incluse le reti nelle vicinanze) e i dati mobili. Con questo pannello, gli utenti possono ripristinare la connettività senza uscire dall'app.

Per visualizzare un pannello 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, come modalità aereo, Wi-Fi e dati mobili.
ACTION_WIFI
Mostra le impostazioni Wi-Fi, ma non le altre impostazioni di connettività. Questa impostazione è utile per le app che necessitano di 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 i flussi audio.

Miglioramenti alla condivisione

Android 10 offre una serie di miglioramenti alla condivisione:

API Sharing Shortcuts

L'API Sharing Shortcuts sostituisce le API Direct Share.

Anziché recuperare i risultati in modo reattivo su richiesta, l'API Sharing Shortcuts consente alle app di pubblicare in anticipo target di condivisione diretti. Ecco come funziona il ShortcutManager. Poiché le due API sono simili, abbiamo ampliato l'API ShortcutInfo per semplificare l'utilizzo di entrambe le funzionalità. Con l'API per le scorciatoie di condivisione, 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 non viene disinstallata.

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

ShortcutInfo.Builder aggiunge e migliora i metodi per fornire ulteriori informazioni sulla destinazione di condivisione.

Target di condivisione diretta

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

ShortcutManagerCompat è una nuova API AndroidX che offre la compatibilità con le versioni precedenti della vecchia API DirectShare. Questo è il modo preferito per pubblicare le destinazioni di condivisione.

Visualizzare l'anteprima del testo

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

Consulta Aggiunta di anteprime in formato RTF

Scopri di più

Per saperne di più su come le app possono condividere i dati, consulta Invio di dati semplici ad altre app e Ricezione di dati semplici da altre app.

Tema scuro

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

Tipi di servizi in primo piano

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

La seguente tabella 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 fitness tracker indossabile
dataSync Scaricare file da una rete
location Continuare un'azione avviata dall'utente
mediaPlayback Riprodurre un audiolibro, un podcast o musica
mediaProjection Registra un video del display del dispositivo per un breve periodo di tempo
phoneCall Gestire una chiamata in corso

Kotlin

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

Annotazioni di nullabilità per le API libcore

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

Normalmente, le violazioni del contratto di nullabilità 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 di nullabilità generano avvisi anziché errori.

Inoltre, le annotazioni @RecentlyNullable o @RecentlyNonNull aggiunte in Android 9 vengono modificate rispettivamente in @Nullable e @NonNull. Ciò significa che, in Android 10 e versioni successive, le violazioni di nullabilità comportano errori anziché avvisi.

Per ulteriori informazioni sulle modifiche alle annotazioni, consulta Android Pie SDK is now more Kotlin-friendly sul Blog per sviluppatori Android.

NDK

Android 10 include le seguenti modifiche all'NDK.

Debug migliorato della proprietà del descrittore di 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à del descrittore di 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 prevenire la gestione errata dei descrittori di file applicando la proprietà dei descrittori di file.

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

ELF TLS

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

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

Per saperne di più, consulta Modifiche di Android per gli sviluppatori NDK.

Runtime

Android 10 include la seguente modifica in fase di runtime.

Attivazione della garbage collection basata su Mallinfo

Quando piccoli oggetti Java della piattaforma 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 release precedenti, la piattaforma stimava le dimensioni di molti oggetti C++ associati a oggetti Java. Questa stima non era sempre accurata e a volte comportava un aumento notevole dell'utilizzo della memoria, poiché la piattaforma non eseguiva la garbage collection quando avrebbe dovuto.

In Android 10, il Garbage Collector (GC) tiene traccia delle dimensioni totali dell'heap allocato dal sistema malloc(), garantendo che le allocazioni di grandi dimensioni malloc() siano sempre incluse nei calcoli di attivazione del GC. Le app che alternano un numero elevato di allocazioni C++ con l'esecuzione Java potrebbero registrare un aumento della frequenza di Garbage Collection. Altre app potrebbero registrare un leggero calo.

Test e debug

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

Miglioramenti per la tracciabilità del sistema sul dispositivo

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

Utilizza questi parametri aggiuntivi per testare casi d'uso diversi da quelli che testeresti con una traccia standard. Ad esempio, potresti diagnosticare un bug delle prestazioni che si verifica solo dopo che l'app è in esecuzione da molto tempo. In questo caso, potresti registrare una traccia lunga per un intero giorno e poi analizzare lo scheduler della CPU, l'attività del disco, i thread delle app e altri dati nel report per aiutarti a 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 la tracciatura delle prestazioni. Puoi convertire i file di traccia Perfetto nel formato Systrace.

Miglioramenti di TextClassifier

Android 10 offre funzionalità di classificazione del testo aggiuntive 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 locale e un punteggio di affidabilità corrispondente per la classificazione.

Azioni suggerite per le conversazioni

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 confidenza.

Risposte/azioni rapide nelle notifiche

Android 9 ha introdotto la possibilità di visualizzare risposte suggerite all'interno di una notifica. Android 10 amplia questa funzionalità con la possibilità di includere azioni suggerite basate sugli intent. Inoltre, la piattaforma è in grado di generare automaticamente questi suggerimenti. Le app possono comunque fornire i propri suggerimenti o disattivare quelli generati dal sistema.

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

Se la tua app fornisce i propri suggerimenti, la piattaforma non genera suggerimenti automatici. Se non vuoi che le notifiche della tua app mostrino risposte o azioni suggerite, puoi disattivare le risposte e le azioni generate dal sistema utilizzando setAllowGeneratedReplies() e setAllowSystemGeneratedContextualActions().