Android 11 introduce nuove fantastiche funzionalità e API per gli sviluppatori. Le sezioni riportate di seguito descrivono le funzionalità delle tue app e inizia a utilizzare le API correlate.
Per un elenco dettagliato delle API nuove, modificate e rimosse, leggi il report Differenze API. Per informazioni dettagliate sulle nuove API, consulta il Riferimento API Android: le nuove API sono evidenziate per la visibilità. Inoltre, per conoscere le aree in cui le modifiche alla piattaforma possono influire sulle tue app, assicurati di controllare le modifiche del comportamento di Android 11 per le app destinate ad Android R e per tutte le app, nonché le modifiche alla privacy.
Nuove esperienze
Controlli dei dispositivi
Android 11 include una nuova API ControlsProviderService
che
puoi utilizzare per esporre i controlli per i dispositivi esterni connessi. Questi controlli vengono visualizzati nella sezione Controlli dispositivo del menu di Android Power. Per scoprire di più, consulta la sezione Controllare i dispositivi esterni.
Controlli media
Android 11 aggiorna la modalità di visualizzazione dei controlli multimediali. I controlli multimediali vengono visualizzati accanto alle impostazioni rapide. Le sessioni di più app sono organizzate in un carosello a scorrimento che include gli stream riprodotti localmente sul telefono, stream remoti, come quelli rilevati su dispositivi esterni o sessioni di trasmissione, e sessioni precedenti ripristinabili nell'ordine dell'ultima riproduzione.
Gli utenti possono riavviare le sessioni precedenti dal carosello senza dover avviare l'app. All'avvio della riproduzione, l'utente interagisce con i controlli multimediali come di consueto.
Per ulteriori informazioni, consulta la sezione Controlli multimediali.
Schermate
Supporto migliorato per le visualizzazioni con struttura a cascata
Android 11 fornisce diverse API per supportare i display con struttura a cascata, ovvero i display che si avvalgono del perimetro del dispositivo. Questi display vengono trattati come una variante
di display con ritagli dei display. I metodi
DisplayCutout
.getSafeInset…()
esistenti ora restituiscono il riquadro di sicurezza per evitare aree con cascata e ritagli.
Per visualizzare i contenuti dell'app nell'area della struttura a cascata:
Chiama
DisplayCutout.getWaterfallInsets()
per ottenere le dimensioni esatte dell'interno della struttura a cascata.Imposta l'attributo di layout della finestra
layoutInDisplayCutoutMode
suLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
per consentire alla finestra di estendersi nelle aree del ritaglio e della struttura a cascata su tutti i bordi dello schermo. Devi assicurarti che non siano presenti contenuti essenziali nelle aree dei ritagli o delle cascate.
Sensore dell'angolazione della cerniera e pieghevoli
Android 11 consente alle app eseguite su dispositivi con configurazioni dello schermo basate sulle cerniere di determinare l'angolazione della cerniera grazie a un nuovo sensore con TYPE_HINGE_ANGLE
e a un nuovo SensorEvent
in grado di monitorare l'angolo della cerniera e fornire una misurazione in gradi tra due parti integrate del dispositivo. Puoi usare queste misurazioni non elaborate per eseguire animazioni
granulari mentre l'utente manipola il dispositivo.
Vedi Foldables (pieghevoli).
Conversazioni
Miglioramenti alle conversazioni
Android 11 apporta una serie di miglioramenti alla modalità di gestione delle conversazioni. Le conversazioni sono comunicazioni bidirezionali in tempo reale tra due o più persone. Queste conversazioni hanno un rilievo speciale e gli utenti hanno diverse nuove opzioni per interagire con le conversazioni.
Per ulteriori informazioni sulle conversazioni e su come l'app può supportarle, vedi Persone e conversazioni.
Bolle della chat
Le bolle sono ora disponibili per gli sviluppatori per contribuire a mostrare le conversazioni in tutto il sistema. Le bolle era una funzionalità sperimentale in Android 10 che è stata attivata tramite un'opzione sviluppatore; in Android 11 non è più necessaria.
Se un'app ha come target Android 11 (livello API 30) o versioni successive, le relative notifiche non vengono presentate come bolle, a meno che non soddisfino i nuovi requisiti relativi alle conversazioni. In particolare, la notifica deve essere associata a una scorciatoia.
Prima di Android 11, se vuoi che la notifica venisse mostrata in bolla, dovevi specificare esplicitamente che la notifica era impostata per l'avvio sempre nella modalità dell'interfaccia utente del documento. A partire da Android 11, non è più necessario specificare questa impostazione in modo esplicito; se la notifica viene mostrata come fumetto, la piattaforma imposta automaticamente la notifica in modo che venga avviata sempre in modalità UI documento.
Sono stati apportati diversi miglioramenti alle prestazioni delle bolle e gli utenti hanno maggiore flessibilità nell'attivare e disattivare le bolle in ogni app. Per gli sviluppatori che hanno implementato il supporto sperimentale, sono state apportate alcune modifiche alle API in Android 11:
- Il costruttore
BubbleMetadata.Builder()
senza parametri è deprecato. Utilizza invece uno dei due nuovi costruttoriBubbleMetadata.Builder(PendingIntent, Icon)
oBubbleMetadata.Builder(String)
. - Crea
BubbleMetadata
da un ID scorciatoia chiamandoBubbleMetadata.Builder(String)
. La stringa passata deve corrispondere all'ID scorciatoia fornito aNotification.Builder
. - Crea icone a fumetto con
Icon.createWithContentUri()
o con il nuovo metodocreateWithAdaptiveBitmapContentUri()
.
Indicatori visivi 5G
Per informazioni sulla visualizzazione degli indicatori 5G sui dispositivi degli utenti, consulta l'articolo Comunicare agli utenti quando utilizzano il 5G.
Privacy
Android 11 introduce un gran numero di modifiche e limitazioni per migliorare la privacy degli utenti. Per scoprire di più, visita la pagina Privacy.
Sicurezza
Aggiornamenti dell'autenticazione biometrica
Per aiutarti a controllare il livello di sicurezza dei dati della tua app, Android 11 offre diversi miglioramenti all'autenticazione biometrica. Queste modifiche vengono visualizzate anche nella libreria biometrica Jetpack.
Tipi di autenticazione
Android 11 introduce l'interfaccia BiometricManager.Authenticators
, che puoi utilizzare per dichiarare i tipi di autenticazione supportati dalla tua app.
Identificazione del tipo di autenticazione utilizzato
Dopo l'autenticazione, puoi controllare se l'utente è stato autenticato utilizzando
una credenziale del dispositivo o una credenziale biometrica chiamando
getAuthenticationType()
.
Supporto aggiuntivo per le chiavi auth-per-use
Android 11 offre un maggiore supporto per l'autenticazione mediante chiavi auth-per-use.
Metodi deprecati
Android 11 ritira i seguenti metodi:
- Il metodo
setDeviceCredentialAllowed()
. - Il metodo
setUserAuthenticationValidityDurationSeconds()
. - La versione sovraccaricata di
canAuthenticate()
che non accetta argomenti.
Condivisione sicura di set di dati di grandi dimensioni
In alcune situazioni, ad esempio quelle che prevedono il machine learning o la riproduzione di contenuti multimediali, la tua app potrebbe voler utilizzare lo stesso set di dati di grandi dimensioni di un'altra app. Nelle versioni precedenti di Android, l'app e un'altra app dovevano scaricare ciascuna una copia separata dello stesso set di dati.
Per ridurre la ridondanza dei dati, sia sulla rete che su disco, Android 11 consente di memorizzare nella cache questi grandi set di dati sul dispositivo utilizzando BLOB di dati condivisi. Per saperne di più sulla condivisione di set di dati, consulta la guida approfondita sulla condivisione di set di dati di grandi dimensioni.
Eseguire la crittografia basata su file dopo un riavvio OTA senza credenziali utente
Dopo che il dispositivo completa un aggiornamento OTA e il riavvio, le chiavi con crittografia delle credenziali (CE) inserite nell'archivio protetto da credenziali sono immediatamente disponibili per le operazioni di crittografia basata su file (FBE). Ciò significa che, dopo un aggiornamento OTA, la tua app può riprendere le operazioni che richiedono i token CE prima che l'utente inserisca il PIN, la sequenza o la password.
Prestazioni e qualità
Debug wireless
Android 11 supporta il deployment e il debug della tua app in modalità wireless dalla workstation tramite Android Debug Bridge (adb). Ad esempio, puoi eseguire il deployment dell'app di cui è possibile eseguire il debug su più dispositivi remoti senza collegare fisicamente il dispositivo tramite USB e non affrontare problemi di connessione USB comuni, ad esempio l'installazione del driver. Per maggiori informazioni, vedi Eseguire app su un dispositivo hardware.
Installazione APK incrementale ADB
L'installazione di APK di grandi dimensioni (oltre 2 GB) su un dispositivo può richiedere molto tempo, anche se viene apportata solo una piccola modifica a un'app. L'installazione incrementale di APK (Android Debug Bridge) di ADB (Android Debug Bridge) accelera questo processo installando una quantità di APK sufficiente per avviare l'app, mentre i dati rimanenti vengono trasmessi in background. adb install
utilizzerà questa funzionalità automaticamente se è supportata dal dispositivo e se hai installato la versione più recente di SDK Platform-Tools. Se non è supportato, viene utilizzato automaticamente il metodo di installazione predefinito.
Usa il seguente comando adb per usare la funzionalità. Se il dispositivo non supporta l'installazione incrementale, il comando non riesce e viene visualizzata una spiegazione dettagliata.
adb install --incremental
Prima di eseguire un'installazione di APK incrementale ADB, devi firmare l'APK e creare un file v4 dello schema di firma dell'APK. Affinché questa funzionalità funzioni, il file della firma v4 deve essere posizionato accanto all'APK.
Rilevamento degli errori con l'allocatore di memoria nativo
GWP-ASan è una funzionalità nativa per l'allocazione della memoria che aiuta a trovare i bug "use-after-free" e heap-buffer-overflow. Puoi abilitare questa funzionalità a livello globale o per processi secondari specifici della tua app. Per scoprire di più, consulta la guida di GWP-Asan.
API Neural Networks 1.3
Android 11 espande e migliora l'API Neural Networks (NNAPI).
Nuove operazioni
NNAPI 1.3 introduce un nuovo tipo di operando, TENSOR_QUANT8_ASYMM_SIGNED
, per supportare il nuovo schema di quantizzazione di TensorFlow Lite.
Inoltre, NNAPI 1.3 introduce le seguenti nuove operazioni:
QUANTIZED_LSTM
IF
WHILE
ELU
HARD_SWISH
FILL
RANK
Nuovi controlli ML
NNAPI 1.3 introduce nuovi controlli per aiutare il machine learning a funzionare senza problemi:
API QoS: la nuova API Quality of Service include il supporto per l'assegnazione delle priorità e le scadenze delle attività in NNAPI con le nuove funzioni seguenti:
Input/output del dominio di memoria: NNAPI 1.3 include il supporto per i domini di memoria come input e output per l'esecuzione. In questo modo vengono rimosse le copie non necessarie degli stessi dati tra i diversi componenti di sistema, migliorando le prestazioni di runtime delle reti neurali Android. Questa funzionalità aggiunge un insieme di nuove API NDK da utilizzare con oggetti
ANeuralNetworksMemoryDesc
eANeuralNetworkMemory
, tra cui le seguenti funzioni:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
Per saperne di più, vedi l'esempio di dominio di memoria della rete neurale.
Supporto di API Dependency e sync fence: NNAPI 1.3 include il supporto per il calcolo asincrono con dipendenze, riducendo notevolmente l'overhead quando richiama modelli con concatenamento ridotto. Questa funzionalità aggiunge le seguenti nuove funzioni:
Flusso di controllo: NNAPI 1.3 include il supporto del flusso di controllo generale con le nuove operazioni sui grafici
ANEURALNETWORKS_IF
eANEURALNETWORKS_WHILE
, che accettano altri modelli come argomenti utilizzando il nuovo tipo di operandoANEURALNETWORKS_MODEL
. Inoltre, questa funzionalità aggiunge le seguenti nuove funzioni:
API NDK Thermal
Quando i dispositivi si surriscaldano, possono limitare la CPU e/o la GPU e questo può influire sulle app in modi imprevisti. Le app o i giochi che incorporano grafica complessa, calcolo intensivo o attività di rete prolungata hanno maggiori probabilità di riscontrare problemi.
Usa l'API NDK Thermal in Android 11 per monitorare le variazioni della temperatura sul dispositivo, quindi intervieni per mantenere un consumo di energia inferiore e una temperatura del dispositivo più bassa. Questa API è simile all'API Java Thermal; puoi utilizzarla per ricevere notifiche relative a qualsiasi modifica dello stato termico o per eseguire direttamente il polling dello stato attuale.
Testo e input
Transizioni IME migliorate
Android 11 introduce nuove API per migliorare le transizioni per gli editor del metodo di input (IME), come le tastiere sullo schermo. Queste API semplificano la regolazione dei contenuti dell'app in sincronizzazione con l'aspetto e la scomparsa dell'IME e con altri elementi come le barre di stato e di navigazione.
Per mostrare un IME mentre lo stato attivo è qualsiasi EditText
, chiama
view.getInsetsController().show(Type.ime())
.
Puoi chiamare questo metodo in qualsiasi vista nella stessa gerarchia dell'elemento EditText
attivo, senza doverlo chiamare in modo specifico nell'EditText
. Per nascondere l'IME, chiama il numero
view.getInsetsController().hide(Type.ime())
.
Puoi controllare se un IME è attualmente visibile chiamando il numero
view.getRootWindowInsets().isVisible(Type.ime())
.
Per sincronizzare le visualizzazioni della tua app con l'aspetto e la scomparsa dell'IME, imposta un listener in una visualizzazione fornendo un WindowInsetsAnimation.Callback
a View.setWindowInsetsAnimationCallback()
.
Puoi impostare questo listener su qualsiasi vista, non deve essere necessariamente un EditText
.
L'IME chiama il metodo
onPrepare()
dell'ascoltatore, poi chiama
onStart()
all'inizio della transizione. Quindi, chiama
onProgress()
a ogni fase della transizione. Al termine della transizione, l'IME chiama
onEnd()
.
In qualsiasi momento durante la transizione, puoi scoprire i progressi fatti chiamando
WindowInsetsAnimation.getFraction()
.
Per un esempio di come utilizzare queste API, vedi il nuovo esempio di codice WindowInsetsAnimation.
Controllo dell'animazione dell'IME
Puoi anche controllare l'animazione dell'IME o dell'animazione di un'altra
barra di sistema come la barra di navigazione. A questo scopo, chiama prima
setOnApplyWindowInsetsListener()
per impostare un nuovo listener per le modifiche all'interno delle finestre:
Kotlin
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
Java
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
Per spostare l'IME o un'altra barra di sistema, chiama il metodo controlWindowInsetsAnimation()
del controller:
Kotlin
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
Java
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
Aggiornamenti alle librerie ICU
Android 11 aggiorna il pacchetto android.icu
per utilizzare la versione 66
della
libreria ICU, rispetto alla versione
63 di Android 10. La nuova versione della libreria include dati internazionali CLDR aggiornati e una serie di miglioramenti al supporto dell'internazionalizzazione in Android.
Le modifiche più significative nelle nuove versioni delle librerie includono:
- Molte API di formattazione ora supportano un nuovo tipo di oggetto restituito che estende
FormattedValue
. - L'API
LocaleMatcher
è migliorata con una classe builder, il supporto per il tipojava.util.Locale
e una classe di risultati con dati aggiuntivi su una corrispondenza. - Unicode 13 è ora supportato.
Contenuti multimediali
Allocazione dei buffer MediaCodec
Android 11 include nuove API MediaCodec
che offrono alle app un maggiore controllo sull'allocazione dei buffer di input e di output. In questo modo l'app
gestisce la memoria in modo più efficiente.
Nuovi corsi:
Nuovi metodi:
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
Inoltre, il comportamento di due metodi in MediaCodec.Callback()
è cambiato:
onInputBufferAvailable()
- Anziché chiamare
MediaCodec.getInputBuffer()
eMediaCodec.queueInputBuffer()
con l'indice, se configurato per l'utilizzo dell'API Block Model, le app devono usareMediaCodec.getQueueRequest
con l'indice, collegando un LinearBlock/HardwareBuffer allo slot. onOutputBufferAvailable()
- Anziché chiamare
MediaCodec.getOutputBuffer()
con l'indice, le app possono utilizzareMediaCodec.getOutputFrame()
con l'indice per ottenere l'oggettoOutputFrame
con ulteriori informazioni e i buffer LinearBlock/HardwareBuffer.
Decodifica a bassa latenza in MediaCodec
Android 11 migliora
MediaCodec
per supportare la decodifica a bassa latenza per giochi e altre app in tempo reale. Puoi
verificare se un codec supporta la decodifica a bassa latenza passando
FEATURE_LowLatency
a
MediaCodecInfo.CodecCapabilities.isFeatureSupported()
.
Per attivare o disattivare la decodifica a bassa latenza:
- Imposta la nuova chiave
KEY_LOW_LATENCY
su 0 o 1 utilizzandoMediaCodec.configure()
. - Imposta la nuova chiave parametro
PARAMETER_KEY_LOW_LATENCY
su 0 o 1 utilizzandoMediaCodec.setParameters()
.
Nuova funzione AAudio AAudioStream_release()
La funzione AAudioStream_close()
pubblica e chiude uno stream audio contemporaneamente. Questo può essere pericoloso. Se
un altro processo tenta di accedere al flusso dopo che è stato chiuso, il processo
si arresta in modo anomalo.
La nuova funzione AAudioStream_release()
rilascia lo stream ma non lo chiude. In questo modo vengono liberate risorse
e lo stato del flusso rimane noto. L'oggetto persiste finché non chiami
AAudioStream_close()
.
API MediaParser
MediaParser è una nuova API di basso livello per l'estrazione di contenuti multimediali. È più flessibile di MediaExtractor e fornisce un ulteriore controllo sulla funzionalità di estrazione dei contenuti multimediali.
Acquisizione dell'audio da un dispositivo USB
Quando un'applicazione senza autorizzazione RECORD_AUDIO
utilizza UsbManager
per richiedere l'accesso diretto a un dispositivo audio USB con funzionalità di acquisizione audio (ad esempio cuffie USB), viene visualizzato un nuovo messaggio di avviso che chiede all'utente di confermare l'autorizzazione a utilizzare il dispositivo. Il sistema ignora qualsiasi opzione "Usa sempre", pertanto l'utente deve confermare l'avviso e concedere l'autorizzazione ogni volta che un'app richiede l'accesso.
Per evitare questo comportamento, la tua app deve richiedere l'autorizzazione RECORD_AUDIO
.
Accesso simultaneo al microfono
Android 11 aggiunge nuovi metodi alle API AudioRecord
, MediaRecorder
e AAudioStream
. Questi metodi abilitano e disabilitano la possibilità di acquisire contemporaneamente indipendentemente dal caso d'uso selezionato. Vedi Condivisione dell'ingresso audio.
Selettore di output
Android 11 implementa un nuovo comportamento per le app che utilizzano le API Cast e Mediarouter.
Oltre ad accedere alle opzioni di trasmissione dall'interno dell'app, le opzioni di passaggio vengono visualizzate anche nel media player di sistema. Ciò consente all'utente di spostarsi facilmente tra i dispositivi quando cambia il contesto di visualizzazione e ascolto, ad esempio se guarda un video in cucina invece che su uno smartphone o ascolta l'audio in casa o in auto. Vedi il selettore di output.
Connettività
Miglioramenti a Wi-Fi Passpoint
Per informazioni sulle funzionalità di Passpoint aggiunte in Android 11, vedi Passpoint.
Espansione dell'API Wi-Fi Suggestion
Android 11 espande l'API Wi-Fi Suggestion per aumentare le funzionalità di gestione della rete della tua app, tra cui:
- Le app di gestione della connettività possono gestire le proprie reti consentendo le richieste di disconnessione.
- Le reti Passpoint sono integrate nell'API Suggestion e possono essere suggerite all'utente.
- Le API Analytics consentono di ottenere informazioni sulla qualità delle reti.
Aggiornamenti di CallScreeningService
A partire da Android 11, un servizio CallScreeningService può richiedere informazioni sullo stato di verifica STIR/SHAKEN (verstat) per le chiamate in entrata. Queste informazioni vengono fornite come parte dei dettagli delle chiamate per le chiamate in arrivo.
Se CallScreeningService
trattiene l'autorizzazione
READ_CONTACTS
, l'app riceve una notifica quando vengono effettuate chiamate in arrivo o
chiamate in uscita da un numero presente nei contatti dell'utente.
Per maggiori informazioni, consulta Prevenire lo spoofing dell'ID chiamante.
Apri aggiornamenti API Mobile
Per informazioni sul supporto OMAPI su Android 11 e versioni successive, consulta l'articolo Supporto del lettore API Open Mobile.
VPN ad alte prestazioni
Le app che hanno come target il livello API 30 e successivi o che vengono eseguite su dispositivi lanciati a livello API 29 e successivi possono applicare IKEv2/IPsec alle VPN sia per le VPN configurate dall'utente che per quelle basate su app.
Le VPN sono native del sistema operativo, semplificando il codice necessario per stabilire connessioni VPN IKEv2/IPsec in un'app.
Controllo dell'accesso alla rete per processo
Per informazioni sull'abilitazione dell'accesso alla rete in base al processo, consulta Gestire l'utilizzo della rete.
Consenti più configurazioni di Passpoint installate con lo stesso nome di dominio completo
A partire da Android 11, puoi utilizzare PasspointConfiguration.getUniqueId()
per ottenere un identificatore univoco per un oggetto PasspointConfiguration
, che consente agli utenti della tua app di installare più profili con lo stesso nome di dominio completo (FQDN).
Questa funzionalità è utile quando un operatore implementa più di una combinazione di codice paese mobile (Centro clienti) e codice di rete mobile (MNC) sulla propria rete, ma ha un solo nome di dominio completo. Su Android 11 e versioni successive, è possibile installare più di un profilo con lo stesso nome di dominio completo che corrisponderà alla rete del provider di casa quando l'utente installa una SIM con Centro clienti o MNC.
Supporto per antenna GNSS
Android 11 introduce la classe GnssAntennaInfo
, che consente all'app di utilizzare meglio il posizionamento di precisione dei centimetri che può fornire il sistema globale di navigazione satellitare (GNSS).
Scopri di più nella guida relativa alle informazioni sulla calibrazione dell'antenna.
Grafica
Decodificatore di immagini NDK
L'API NDK ImageDecoder
fornisce un'API standard per le app Android C/C++ per decodificare direttamente le immagini. Gli sviluppatori di app non devono più utilizzare le API framework (tramite JNI) o integrare librerie di decodifica delle immagini di terze parti. Per ulteriori informazioni, consulta la guida per gli sviluppatori con decoder immagini.
API frame rate
Android 11 fornisce un'API che consente alle app di comunicare al sistema la frequenza fotogrammi prevista, per ridurre il disturbo sui dispositivi che supportano più frequenze di aggiornamento. Per informazioni su come utilizzare questa API, consulta la guida alla frequenza fotogrammi.
Richiesta e verifica dell'assistenza per bassa latenza
Alcuni display possono eseguire la post-elaborazione grafica, come alcuni display e TV esterni. Questa post-elaborazione migliora la grafica, ma può aumentare la latenza. I display più recenti che supportano HDMI 2.1 dispongono di una modalità automatica a bassa latenza (ALLM, nota anche come modalità di gioco), che riduce al minimo la latenza disattivando questa post-elaborazione. Per ulteriori dettagli su ALLM, consulta la specifica HDMI 2.1.
Una finestra può richiedere l'utilizzo della modalità automatica a bassa latenza, se disponibile. ALLM è particolarmente utile per applicazioni come giochi e videoconferenze, in cui la bassa latenza è più importante rispetto alla grafica migliore possibile.
Per attivare o disattivare la post-elaborazione minima, chiama
Window.setPreferMinimalPostProcessing()
o imposta l'attributo
preferMinimalPostProcessing
della finestra su true
. Non tutti i display supportano una post-elaborazione minima; per sapere se un determinato display la supporta, chiama il nuovo metodo Display.isMinimalPostProcessingSupported()
.
Iniezione del livello di debug delle immagini ad alte prestazioni
Le applicazioni ora possono caricare livelli grafici esterni (GLES, Vulkan) nel codice dell'applicazione nativa per esporre la stessa funzionalità di un'app di cui è possibile eseguire il debug, ma senza comportare il sovraccarico delle prestazioni. Questa funzionalità è particolarmente importante quando profila la tua applicazione con strumenti come GAPID. Per profilare la tua app, includi il seguente elemento di metadati nel file manifest dell'app anziché rendere l'applicazione di cui è possibile eseguire il debug:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Immagini e fotocamera
Disattiva i suoni e le vibrazioni delle notifiche durante l'acquisizione attiva
A partire da Android 11, quando usi attivamente la fotocamera, l'app
può disattivare solo le vibrazioni, i suoni e le vibrazioni o nessuna delle due utilizzando
setCameraAudioRestriction()
.
Supporto esteso della fotocamera nell'emulatore Android
Per informazioni sul supporto esteso per le fotocamere nell'emulatore a partire da Android 11, consulta Supporto delle videocamere.
Supporto per l'uso simultaneo di più videocamere
Android 11 aggiunge API per supportare le query relative all'utilizzo di più videocamere alla volta, comprese quelle anteriori e posteriori.
Per verificare il supporto per il dispositivo su cui è in esecuzione la tua app, utilizza i seguenti metodi:
getConcurrentCameraIds()
restituisce un valoreSet
di combinazioni di ID videocamera che possono trasmettere in streaming contemporaneamente con combinazioni di stream garantite se configurati dallo stesso processo di applicazione.isConcurrentSessionConfigurationSupported()
chiede se i dispositivi della videocamera possono supportare contemporaneamente le configurazioni di sessione corrispondenti.
Supporto migliorato per le immagini HEIF con più frame
A partire da Android 11, se chiami ImageDecoder.decodeDrawable()
e passi un'immagine HEIF contenente una sequenza di frame (ad esempio un'animazione o una foto a raffica), il metodo restituisce un AnimatedImageDrawable
contenente l'intera sequenza di immagini. Nelle versioni precedenti di Android, il metodo ha restituito un valore BitmapDrawable
di un solo frame.
Se l'immagine HEIF contiene più frame che non sono in sequenza, puoi recuperare un singolo frame chiamando MediaMetadataRetriever.getImageAtIndex()
.
Accessibilità
Aggiornamenti per gli sviluppatori di servizi di accessibilità
Se crei un servizio di accessibilità personalizzato, puoi utilizzare le seguenti funzionalità in Android 11:
- La spiegazione rivolta agli utenti di un servizio di accessibilità ora consente l'utilizzo di HTML e immagini oltre al testo normale. Questa flessibilità semplifica la spiegazione agli utenti finali di cosa fa il tuo servizio e in che modo può aiutarli.
- Per lavorare con una descrizione dello stato di un elemento UI che sia più semanticamente significativa rispetto a
contentDescription
, chiama il metodogetStateDescription()
. - Per fare in modo che gli eventi touch ignorino l'Explorer touch del sistema, chiama
setTouchExplorationPassthroughRegion()
. Analogamente, per richiedere che i gesti ignorino il rilevatore di gesti del sistema, chiamasetGestureDetectionPassthroughRegion()
. - Puoi richiedere azioni relative all'IME, ad esempio"Invio " e"Avanti", nonché screenshot delle finestre che non attivano il flag
FLAG_SECURE
.
Altre funzionalità
Motivi di uscita dal processo dell'app
Android 11 introduce il metodo ActivityManager.getHistoricalProcessExitReasons()
, che segnala i motivi di eventuali recenti chiusure dei processi. Le app possono
utilizzare questo metodo per raccogliere informazioni diagnostiche sugli arresti anomali, ad esempio
se la terminazione di un processo è dovuta ad ANR, problemi di memoria o altri motivi.
Inoltre, puoi utilizzare il nuovo metodo
setProcessStateSummary()
per archiviare informazioni personalizzate sullo stato da analizzare in un secondo momento.
Il metodo getHistoricalProcessExitReasons()
restituisce istanze della classe ApplicationExitInfo
, che contiene informazioni relative alla morte di un processo dell'app. Chiamando
getReason()
su un'istanza di questa classe, puoi determinare il motivo per cui il processo
della tua app è stato interrotto. Ad esempio, un valore restituito REASON_CRASH
indica che
nella tua app si è verificata un'eccezione non gestita. Se la tua app deve garantire
univocità per gli eventi di uscita, può mantenere un identificatore specifico per l'app, ad esempio
un valore hash basato sul timestamp del
metodo
getTimestamp()
.
Risorse aggiuntive
Per ulteriori informazioni, leggi l'articolo sui nuovi strumenti di Android 11 per rendere le app più private e stabili su Medium.
Caricatori di risorse
Android 11 introduce una nuova API che consente alle app di estendere dinamicamente
il modo in cui le risorse vengono cercate e caricate. Le nuove classi API
ResourcesLoader
e
ResourcesProvider
sono principalmente responsabili della fornitura della nuova funzionalità. Insieme, offrono la possibilità di fornire risorse e asset aggiuntivi o di modificare i valori di risorse e asset esistenti.
Gli oggetti ResourcesLoader
sono container che forniscono oggetti ResourcesProvider
all'istanza Resources
di un'app. A loro volta, gli oggetti ResourcesProvider
forniscono metodi per caricare i dati delle risorse da APK e tabelle di risorse.
Uno dei casi d'uso principali di questa API è il caricamento degli asset personalizzati. Puoi usare loadFromDirectory()
per creare un ResourcesProvider
che reindirizzi la risoluzione di risorse e asset basati su file, in modo da eseguire la ricerca in una directory specifica anziché nell'APK dell'applicazione. Puoi accedere a questi asset tramite la famiglia di metodi open()
della classe API AssetManager
, proprio come per gli asset raggruppati nell'APK.
Schema di firma APK v4
Android 11 aggiunge il supporto per lo schema di firma dell'APK v4. Questo schema genera un nuovo tipo di firma in un file separato (apk-name.apk.idsig
), ma è simile alle versioni v2 e v3. Non vengono apportate modifiche all'APK. Questo schema supporta l'installazione incrementale di ADB APK, che velocizza l'installazione dell'APK.
Filtri dinamici per intent
Per ricevere intent, un'app deve dichiarare in fase di compilazione quali tipi di dati può ricevere definendo un filtro per intent nel file manifest dell'app. In Android 10 e versioni precedenti, le app non hanno modo di modificare i filtri di intent in fase di runtime. Questo rappresenta un problema per le app di virtualizzazione (come macchine virtuali e desktop remoti) perché non hanno modo di sapere esattamente quale software l'utente installerà al loro interno.
Android 11 introduce i gruppi MIME, un nuovo elemento manifest che consente a un'app di dichiarare un set dinamico di tipi MIME in un filtro per intent e di modificarlo in modo programmatico in fase di runtime. Per utilizzare un gruppo MIME, includi un elemento di dati nel file manifest dell'app con il nuovo attributo android:mimeGroup
:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
Il valore dell'attributo android:mimeGroup
è un ID stringa arbitrario che
identifica il gruppo MIME in fase di runtime. Puoi accedere ai contenuti di un gruppo MIME e aggiornarne i contenuti passando il relativo ID ai nuovi metodi seguenti nella classe dell'API PackageManager
:
Quando aggiungi un tipo MIME a un gruppo MIME in modo programmatico, funziona esattamente come un tipo MIME statico dichiarato esplicitamente nel manifest.
Miglioramenti alla compilazione automatica
Android 11 introduce miglioramenti per i servizi di compilazione automatica.
Identificatori dei suggerimenti in AssistStructured.ViewNode
Spesso è utile per i servizi di compilazione automatica calcolare un hash di firma per una vista in base alle proprietà di quest'ultima. Il suggerimento vista è una proprietà particolarmente utile da includere quando si calcola un hash della firma, ma la stringa del suggerimento potrebbe cambiare in base alle impostazioni internazionali del telefono. Per risolvere il problema, Android 11 espande
AssistStructure.ViewNode
con un nuovo metodo
getHintIdEntry()
, che restituisce l'identificatore risorsa per il testo del suggerimento di una vista. Questo metodo fornisce un valore indipendente dalle impostazioni internazionali che puoi usare per calcolare gli hash delle firme.
Eventi dei set di dati mostrati
Per aiutare i servizi di compilazione automatica a migliorare i suggerimenti, Android 11 fornisce un modo per identificare i casi in cui un servizio di compilazione automatica ha presentato set di dati, ma l'utente non ne ha selezionato nessuno. In Android 11, FillEventHistory
registra un nuovo tipo di evento TYPE_DATASETS_SHOWN
. FillEventHistory
registra un evento di questo tipo ogni volta che il servizio di compilazione automatica presenta uno o più set di dati all'utente. I servizi di compilazione automatica possono utilizzare questi eventi in combinazione con l'evento TYPE_DATASET_SELECTED
esistente per determinare se l'utente ha selezionato una delle opzioni di compilazione automatica fornite.
Integrazione IME
Le tastiere e altri IME ora possono visualizzare i suggerimenti di compilazione automatica in linea, in una barra dei suggerimenti o in un'interfaccia simile, anziché in un menu a discesa. Per proteggere informazioni sensibili come password e numeri di carte di credito, i suggerimenti vengono mostrati all'utente, ma non sono noti all'IME finché l'utente non ne seleziona uno. Per informazioni su come gli IME e i gestori delle password possono supportare questa funzionalità, consulta Integrazione della compilazione automatica con le tastiere.
Condivisione dei dati con il servizio di acquisizione di contenuti
A partire da Android 11, la tua app può condividere dati con il servizio di acquisizione dei contenuti del dispositivo. Questa funzionalità consente a un dispositivo di fornire più facilmente informazioni contestualizzate, ad esempio la visualizzazione del nome di un brano attualmente in riproduzione nell'ambiente dell'utente.
Per rendere i dati della tua app disponibili per il servizio di acquisizione dei contenuti, chiama il metodo shareData()
su un'istanza di ContentCaptureManager
. Se il sistema accetta la richiesta di condivisione dei dati, la tua app riceve un descrittore di file di sola scrittura da condividere con il servizio di acquisizione dei contenuti.