Android 11 introduce nuove fantastiche funzionalità e API per gli sviluppatori. Le sezioni di seguito ti aiutano a scoprire le funzionalità delle tue app e a iniziare a utilizzare le API correlate.
Per un elenco dettagliato delle API nuove, modificate e rimosse, leggi il report sulle differenze tra le API. Per informazioni dettagliate sulle nuove API, visita la documentazione di riferimento delle API Android. Le nuove API sono evidenziate per una maggiore visibilità. Inoltre, per scoprire le aree in cui le modifiche alla piattaforma potrebbero influire sulle tue app, consulta le modifiche al comportamento di Android 11 per le app che hanno come target Android R e per tutte le app, nonché le modifiche alla privacy.
Nuove esperienze
Controlli del dispositivo
Android 11 include una nuova API ControlsProviderService
che puoi utilizzare per esporre i controlli per i dispositivi esterni connessi. Questi controlli
vengono visualizzati in Controlli dispositivo nel menu di alimentazione di Android. Per maggiori
informazioni, vedi Controllare i dispositivi esterni.
Controlli multimediali
Android 11 aggiorna la modalità di visualizzazione dei controlli multimediali. I controlli multimediali vengono visualizzati vicino alle Impostazioni rapide. Le sessioni di più app sono disposte in un carosello scorrevole che include gli stream riprodotti localmente sullo smartphone, gli stream remoti, ad esempio quelli rilevati su dispositivi esterni o le sessioni di trasmissione, e le sessioni precedenti riproducibili nell'ordine in cui sono state riprodotte l'ultima volta.
Gli utenti possono riavviare le sessioni precedenti dal carosello senza dover avviare l'app. Quando inizia la riproduzione, l'utente interagisce con i controlli multimediali nel solito modo.
Per ulteriori informazioni, vedi Controlli multimediali.
Schermi
Supporto migliore per le visualizzazioni a cascata
Android 11 fornisce diverse API per supportare i display a cascata, ovvero i display che avvolgono il bordo del dispositivo. Questi display vengono trattati come una variante dei
display con intagli. I metodi
DisplayCutout
.getSafeInset…()
esistenti ora restituiscono l'inset sicuro per evitare le aree a cascata e le tacche.
Per visualizzare i contenuti dell'app nell'area a cascata, procedi nel seguente modo:
Chiama
DisplayCutout.getWaterfallInsets()
per ottenere le dimensioni esatte dell'inserto della cascata.Imposta l'attributo di layout della finestra
layoutInDisplayCutoutMode
suLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
per consentire alla finestra di estendersi nelle aree di ritaglio e a cascata su tutti i bordi dello schermo. Devi assicurarti che nessun contenuto essenziale si trovi nelle aree di ritaglio o a cascata.
Sensore dell'angolo della cerniera e pieghevoli
Android 11 consente alle app in esecuzione su
dispositivi con configurazioni dello schermo basate su cerniere di
determinare l'angolo della cerniera fornendo un nuovo sensore
con TYPE_HINGE_ANGLE
e un nuovo
SensorEvent
che può monitorare
l'angolo della cerniera e fornisce una misurazione in gradi tra due
parti integrali del dispositivo. Puoi utilizzare queste misurazioni non elaborate per eseguire
animazioni granulari mentre l'utente manipola il dispositivo.
Vedi Foldables.
Conversazioni
Miglioramenti alle conversazioni
Android 11 apporta una serie di miglioramenti al modo in cui vengono gestite le conversazioni. Le conversazioni sono comunicazioni bidirezionali in tempo reale tra due o più persone. Queste conversazioni hanno una visibilità speciale e gli utenti hanno diverse nuove opzioni per interagire con loro.
Per saperne di più sulle conversazioni e su come la tua app può supportarle, consulta Persone e conversazioni.
Bolla della chat
Le bolle sono ora disponibili per gli sviluppatori per aiutare a mostrare le conversazioni nel sistema. Le bolle erano una funzionalità sperimentale di Android 10 che veniva attivata tramite un'opzione sviluppatore; in Android 11, non è più necessario.
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 per le conversazioni. Nello specifico, la notifica deve essere associata a una scorciatoia.
Prima di Android 11, se volevi che una notifica venisse visualizzata in una bolla, dovevi specificare esplicitamente che la notifica era impostata per essere sempre avviata in modalità UI documento. A partire da Android 11, non è più necessario impostare esplicitamente questa impostazione; se la notifica viene visualizzata in una bolla, la piattaforma imposta automaticamente la notifica in modo che venga sempre avviata in modalità UI documento.
Sono stati apportati diversi miglioramenti alle prestazioni delle bolle e gli utenti hanno maggiore flessibilità nell'attivazione e nella disattivazione delle bolle da 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 è obsoleto. Utilizza invece uno dei due nuovi costruttoriBubbleMetadata.Builder(PendingIntent, Icon)
oBubbleMetadata.Builder(String)
. - Crea
BubbleMetadata
da un ID scorciatoia chiamandoBubbleMetadata.Builder(String)
. La stringa trasmessa deve corrispondere all'ID scorciatoia fornito aNotification.Builder
. - Crea icone a bolle con
Icon.createWithContentUri()
, o con il nuovo metodocreateWithAdaptiveBitmapContentUri()
.
Indicatori visivi 5G
Per informazioni sulla visualizzazione degli indicatori 5G sui dispositivi degli utenti, vedi Comunicare agli utenti quando è attivo il servizio 5G.
Privacy
Android 11 introduce un gran numero di modifiche e limitazioni per migliorare la privacy degli utenti. Per saperne di più, consulta 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 Jetpack Biometric.
Tipi di autenticazione
Android 11 introduce l'interfaccia
BiometricManager.Authenticators
, che puoi utilizzare per dichiarare i tipi di autenticazione supportati dalla tua app.
Determinare il tipo di autenticazione utilizzato
Dopo l'autenticazione dell'utente, puoi verificare se l'autenticazione è stata eseguita utilizzando
una credenziale del dispositivo o una credenziale biometrica chiamando
getAuthenticationType()
.
Supporto aggiuntivo per le chiavi di autenticazione per utilizzo
Android 11 offre un maggiore supporto per l'autenticazione tramite chiavi di autenticazione per utilizzo.
Metodi ritirati
Android 11 ritira i seguenti metodi:
- Il metodo
setDeviceCredentialAllowed()
. - Il metodo
setUserAuthenticationValidityDurationSeconds()
. - La versione sovraccarica di
canAuthenticate()
che non accetta argomenti.
Condivisione sicura di set di dati di grandi dimensioni
In alcune situazioni, ad esempio quelle che coinvolgono 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, la tua app e un'altra app dovevano scaricare una copia separata dello stesso set di dati.
Per contribuire a ridurre la ridondanza dei dati, sia sulla rete che sul 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 dei set di dati, consulta la guida dettagliata sulla condivisione di set di dati di grandi dimensioni.
Esegui la crittografia basata su file dopo il riavvio OTA senza credenziali utente
Dopo che il dispositivo ha completato un aggiornamento OTA e si è riavviato, le chiavi Credential Encrypted (CE) inserite nello spazio di archiviazione 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 le chiavi CE prima che l'utente inserisca il PIN, la sequenza o la password.
Rendimento e qualità
Debug wireless
Android 11 supporta il deployment e il debug wireless della tua app dalla tua 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 connettere fisicamente il dispositivo tramite USB e senza dover risolvere i problemi comuni di connessione USB, come l'installazione dei driver. Per maggiori informazioni, vedi Eseguire app su un dispositivo hardware.
Installazione incrementale di APK tramite ADB
L'installazione di APK di grandi dimensioni (2 GB o più) su un dispositivo può richiedere molto tempo, anche se viene apportata solo una piccola modifica a un'app. L'installazione incrementale di APK tramite ADB (Android Debug Bridge) accelera questo processo installando una parte sufficiente dell'APK per avviare l'app durante lo streaming dei dati rimanenti in background. adb install
utilizzerà
questa funzionalità automaticamente se è supportata dal dispositivo e se hai installato
l'ultima versione di SDK Platform-Tools. Se non è
supportato, viene utilizzato il metodo di installazione predefinito.
Utilizza il seguente comando adb per utilizzare la funzionalità. Se il dispositivo non supporta l'installazione incrementale, il comando non va a buon fine e viene stampata una spiegazione dettagliata.
adb install --incremental
Prima di eseguire un'installazione incrementale dell'APK tramite ADB, devi firmare l'APK e creare un file dello schema di firma dell'APK v4. Per il funzionamento di questa funzionalità, il file di firma v4 deve essere posizionato accanto all'APK.
Rilevamento degli errori utilizzando l'allocatore di memoria nativo
GWP-ASan è una funzionalità di allocazione della memoria nativa che aiuta a trovare bug use-after-free e heap-buffer-overflow. Puoi attivare questa funzionalità a livello globale o per sottoprocessi specifici della tua app. Per saperne di più, consulta la guida GWP-Asan.
API Neural Networks 1.3
Android 11 espande e migliora l'API Neural Networks (NNAPI).
Nuove operazioni
L'API NN 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 contribuire al corretto funzionamento del machine learning:
API QoS:la nuova API Quality of Service include il supporto per la definizione delle priorità e le scadenze delle attività in NNAPI con le seguenti nuove funzioni:
Input/output del dominio di memoria:NNAPI 1.3 include il supporto dei domini di memoria come input e output dell'esecuzione. In questo modo vengono rimosse le copie non necessarie degli stessi dati tra i diversi componenti del sistema, migliorando le prestazioni di runtime delle reti neurali Android. Questa funzionalità aggiunge un insieme di nuove API NDK da utilizzare con gli 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 scoprire di più, consulta l'esempio di dominio di memoria della rete neurale.
Supporto dell'API Dependency e della barriera di sincronizzazione:NNAPI 1.3 include il supporto per il calcolo asincrono con dipendenze, che consente di ridurre notevolmente l'overhead quando vengono richiamati piccoli modelli concatenati. Questa funzionalità aggiunge le seguenti nuove funzioni:
Controllo del flusso:NNAPI 1.3 include il supporto per il controllo del flusso generale con le nuove operazioni del grafico
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 troppo, potrebbero limitare la CPU e/o la GPU, il che può influire sulle app in modi inaspettati. Le app o i giochi che incorporano grafica complessa, calcoli pesanti o attività di rete sostenuta hanno maggiori probabilità di riscontrare problemi.
Utilizza l'API NDK Thermal in Android 11 per monitorare le variazioni di temperatura sul dispositivo, quindi intervieni per mantenere un consumo energetico inferiore e una temperatura del dispositivo più bassa. Questa API è simile all'API Java Thermal; puoi utilizzarla per ricevere notifiche per qualsiasi modifica dello stato termico o per eseguire il polling direttamente dello stato attuale.
Testo e input
Transizioni IME migliorate
Android 11 introduce nuove API per migliorare le transizioni per gli editor dei metodi di input (IME), come le tastiere sullo schermo. Queste API semplificano la regolazione dei contenuti dell'app in sincronizzazione con la comparsa e la scomparsa dell'IME e con altri elementi come le barre di stato e di navigazione.
Per mostrare un IME mentre un EditText
è attivo, chiama
view.getInsetsController().show(Type.ime())
.
Puoi chiamare questo metodo su qualsiasi visualizzazione nella stessa gerarchia del EditText
selezionato, non devi chiamarlo specificamente sul EditText
. Per nascondere l'IME, chiama
view.getInsetsController().hide(Type.ime())
.
Puoi verificare se un IME è attualmente visibile chiamando
view.getRootWindowInsets().isVisible(Type.ime())
.
Per sincronizzare le visualizzazioni dell'app con la comparsa e la scomparsa dell'IME, imposta un listener su una visualizzazione fornendo un
WindowInsetsAnimation.Callback
a View.setWindowInsetsAnimationCallback()
.
Puoi impostare questo listener su qualsiasi visualizzazione, non deve essere un EditText
.
L'IME chiama il metodo
onPrepare()
del listener, poi chiama
onStart()
all'inizio della transizione. Chiama quindi
onProgress()
a ogni progressione della transizione. Al termine della transizione, l'IME chiama
onEnd()
.
In qualsiasi momento della transizione, puoi scoprire a che punto si trova chiamando
WindowInsetsAnimation.getFraction()
.
Per un esempio di come utilizzare queste API, consulta il nuovo WindowInsetsAnimation esempio di codice.
Controllare l'animazione dell'IME
Puoi anche controllare l'animazione dell'IME o di un'altra
barra di sistema come la barra di navigazione. Per farlo, chiama innanzitutto
setOnApplyWindowInsetsListener()
per impostare un nuovo listener per le modifiche all'inset della finestra:
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 locali CLDR aggiornati
e una serie di miglioramenti al supporto dell'internazionalizzazione in Android.
Le modifiche principali nelle nuove versioni della libreria includono quanto segue:
- Molte API di formattazione ora supportano un nuovo tipo di oggetto restituito che estende
FormattedValue
. - L'API
LocaleMatcher
è migliorata con una classe di creazione, 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 durante l'allocazione dei buffer di input e output. In questo modo l'app può gestire 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()
- Invece di chiamare
MediaCodec.getInputBuffer()
eMediaCodec.queueInputBuffer()
con l'indice, se configurate per utilizzare l'API Block Model, le app devono utilizzareMediaCodec.getQueueRequest
con l'indice, allegando 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 maggiori informazioni e buffer LinearBlock/HardwareBuffer.
Decodifica a bassa latenza in MediaCodec
Android 11 migliora
MediaCodec
per supportare la decodifica a bassa latenza per i 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, procedi in uno dei seguenti modi:
- Imposta la nuova chiave
KEY_LOW_LATENCY
su 0 o 1 utilizzandoMediaCodec.configure()
. - Imposta la nuova chiave del parametro
PARAMETER_KEY_LOW_LATENCY
su 0 o 1 utilizzandoMediaCodec.setParameters()
.
Nuova funzione AAudioStream_release()
La funzione
AAudioStream_close()
rilascia e chiude un flusso audio contemporaneamente. Questa operazione può essere pericolosa. Se
un altro processo tenta di accedere allo stream dopo la chiusura, il processo
si arresterà in modo anomalo.
La nuova funzione
AAudioStream_release()
rilascia lo stream, ma non lo chiude. In questo modo le risorse vengono liberate e lo stream viene lasciato in uno stato noto. L'oggetto rimane 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 offre un maggiore controllo sulla funzionalità di estrazione dei contenuti multimediali.
Acquisizione audio da un dispositivo USB
Quando un'applicazione senza l'autorizzazione RECORD_AUDIO
utilizza UsbManager
per richiedere l'accesso diretto a un dispositivo audio USB con funzionalità di acquisizione audio (ad esempio una cuffia 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", quindi 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 attivano e disattivano la possibilità di acquisire contemporaneamente
indipendentemente dal caso d'uso selezionato. Vedi Condivisione dell'input 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 di un'app, le opzioni di cambio vengono visualizzate anche nel lettore multimediale di sistema. In questo modo, l'utente può passare da un dispositivo all'altro senza interruzioni quando cambia il contesto di visualizzazione e ascolto, ad esempio quando guarda un video in cucina anziché su uno smartphone o quando ascolta l'audio in casa o in auto. Consulta il selettore dell'output.
Connettività
Miglioramenti di Wi-Fi Passpoint
Per informazioni sulle funzionalità Passpoint aggiunte in Android 11, vedi Passpoint.
L'API per i suggerimenti sul Wi-Fi è espansa
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 ti consentono di ottenere informazioni sulla qualità delle tue reti.
Aggiornamenti di CallScreeningService
A partire da Android 11, un CallScreeningService può richiedere informazioni sullo stato di verifica STIR/SHAKEN (verstat) per le chiamate in arrivo. Queste informazioni vengono fornite nell'ambito dei dettagli della chiamata per le chiamate in arrivo.
Se un'CallScreeningService
dispone dell'autorizzazione
READ_CONTACTS
, l'app riceve una notifica quando ci sono chiamate in entrata da o in uscita verso un numero nei contatti dell'utente.
Per ulteriori informazioni, vedi Impedire lo spoofing dell'ID chiamante.
Aggiornamenti dell'API Open Mobile
Per informazioni sul supporto OMAPI su Android 11 e versioni successive, vedi Supporto del lettore Open Mobile API.
VPN performanti
Le app che hanno come target il livello API 30 e versioni successive o che vengono eseguite su dispositivi lanciati con il livello API 29 e versioni successive possono applicare IKEv2/IPsec alle VPN sia per le VPN configurate dall'utente sia per quelle basate su app.
Le VPN vengono eseguite in modo nativo sul 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'attivazione dell'accesso alla rete in base al processo, vedi Gestire l'utilizzo della rete.
Consenti più configurazioni Passpoint installate con lo stesso FQDN
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 (MCC) e codice di rete mobile (MNC) sulla propria rete, ma ha un solo FQDN. Su Android 11 e versioni successive, è possibile installare più profili con lo stesso FQDN che corrisponderà alla rete come provider di rete di casa quando l'utente installa una SIM con MCC o MNC.
Supporto dell'antenna GNSS
Android 11 introduce la classe
GnssAntennaInfo
, che consente
alla tua app di utilizzare maggiormente il posizionamento con precisione al centimetro che
il Global Navigation Satellite System (GNSS) può fornire.
Scopri di più nella guida sulle informazioni sulla calibrazione dell'antenna.
Grafica
Decodificatore di immagini NDK
L'API NDK ImageDecoder
fornisce un'API standard per le app C/C++ per Android per decodificare direttamente le immagini. Gli sviluppatori di app non
devono più utilizzare le API del framework (tramite JNI) o raggruppare librerie di decodifica delle immagini di terze parti. Per ulteriori informazioni, consulta la
Guida per gli sviluppatori del decodificatore di immagini.
API Frame Rate
Android 11 fornisce un'API che consente alle app di comunicare al sistema la frequenza frame prevista, per ridurre il judder sui dispositivi che supportano più frequenze di aggiornamento. Per informazioni su come utilizzare questa API, consulta la guida al frame rate.
Richiesta e verifica del supporto per la bassa latenza
Alcuni display possono eseguire la post-elaborazione grafica, ad esempio 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 hanno una modalità automatica a bassa latenza (ALLM, nota anche come modalità di gioco), che riduce al minimo la latenza disattivando questo post-processing. Per maggiori dettagli su ALLM, consulta la specifica HDMI 2.1.
Una finestra può richiedere l'utilizzo della modalità a bassa latenza automatica, se disponibile. ALLM è particolarmente utile per applicazioni come giochi e videoconferenze, in cui la bassa latenza è più importante della migliore grafica 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 la post-elaborazione
minima. Per scoprire se un determinato display la supporta, chiama il
nuovo metodo
Display.isMinimalPostProcessingSupported()
.
Inserimento del livello di debug delle prestazioni grafiche
Le applicazioni ora possono caricare livelli grafici esterni (GLES, Vulkan) nel codice dell'applicazione nativa per esporre la stessa funzionalità di un'app sottoponibile a debug, ma senza incorrere nell'overhead delle prestazioni. Questa funzionalità è particolarmente importante quando profili 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 eseguibile in modalità di debug:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Immagini e fotocamera
Disattivare i suoni e le vibrazioni delle notifiche durante l'acquisizione attiva
A partire da Android 11, quando utilizzi attivamente la fotocamera, la tua
app può disattivare solo le vibrazioni, sia suoni che vibrazioni, o nessuno dei due utilizzando
setCameraAudioRestriction()
.
Supporto ampliato della fotocamera nell'emulatore Android
Per informazioni sul supporto esteso per le videocamere nell'emulatore a partire da Android 11, vedi Supporto della videocamera.
Supporto dell'utilizzo simultaneo di più di una videocamera
Android 11 aggiunge API per eseguire query sul supporto dell'utilizzo di più di una fotocamera alla volta, incluse una fotocamera anteriore e una posteriore.
Per verificare il supporto sul dispositivo su cui è in esecuzione l'app, utilizza i seguenti metodi:
getConcurrentCameraIds()
restituisce unSet
di combinazioni di ID videocamera che possono essere riprodotti in streaming contemporaneamente con combinazioni di streaming garantite se configurate dallo stesso processo dell'applicazione.isConcurrentSessionConfigurationSupported()
verifica se i dispositivi con videocamera possono supportare contemporaneamente le configurazioni di sessione corrispondenti.
Supporto migliore 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 restituiva un BitmapDrawable
di un solo frame.
Se la grafica HEIF contiene più frame non 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 di un servizio di accessibilità rivolta agli utenti ora consente di utilizzare HTML e immagini oltre al testo normale. Questa flessibilità consente di spiegare più facilmente agli utenti finali cosa fa il tuo servizio e come può aiutarli.
- Per utilizzare una descrizione dello stato di un elemento dell'interfaccia utente più significativa dal punto di vista semantico
rispetto a
contentDescription
, chiama il metodogetStateDescription()
. - Per richiedere che gli eventi touch bypassino l'esploratore touch del sistema, chiama
setTouchExplorationPassthroughRegion()
. Analogamente, per richiedere che i gesti ignorino il rilevatore di gesti del sistema, chiamasetGestureDetectionPassthroughRegion()
. - Puoi richiedere azioni IME, come "Invio" e "Avanti", nonché
screenshot di finestre che non abilitano il flag
FLAG_SECURE
.
Altre funzionalità
Motivi di uscita del processo dell'app
Android 11 introduce il metodo
ActivityManager.getHistoricalProcessExitReasons()
, che segnala i motivi di eventuali interruzioni recenti dei processi. Le app possono
utilizzare questo metodo per raccogliere informazioni di diagnostica sugli arresti anomali, ad esempio se l'interruzione di un
processo è dovuta a errori ANR, problemi di memoria o altri motivi.
Inoltre, puoi utilizzare il nuovo metodo
setProcessStateSummary()
per archiviare informazioni sullo stato personalizzato per un'analisi successiva.
Il metodo getHistoricalProcessExitReasons()
restituisce istanze della classe
ApplicationExitInfo
, che contiene informazioni relative alla chiusura 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 di REASON_CRASH
indica che
nell'app si è verificata un'eccezione non gestita. Se l'app deve garantire
l'unicità per gli eventi di uscita, può mantenere un identificatore specifico dell'app, ad esempio
un valore hash basato sul timestamp del
metodo getTimestamp()
.
Risorse aggiuntive
Per saperne di più, leggi l'articolo sulle nuove funzionalità 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
la modalità di ricerca e caricamento delle risorse. Le nuove classi API
ResourcesLoader
e
ResourcesProvider
sono principalmente responsabili della fornitura della nuova funzionalità. Insieme, consentono di fornire risorse e asset aggiuntivi o modificare i valori di risorse e asset esistenti.
Gli oggetti ResourcesLoader
sono container che forniscono oggetti ResourcesProvider
a un'istanza Resources
di un'app. A loro
volta, gli oggetti ResourcesProvider
forniscono metodi per caricare i dati delle risorse da
APK e tabelle delle risorse.
Un caso d'uso principale di questa API è il caricamento personalizzato degli asset. Puoi utilizzare
loadFromDirectory()
per creare un ResourcesProvider
che reindirizza la risoluzione di risorse e asset basati su file, facendo in modo che venga cercata una directory specifica anziché l'APK dell'applicazione. Puoi accedere a questi asset tramite la famiglia di metodi open()
della classe API AssetManager
, proprio come con gli asset inclusi nell'APK.
Schema di firma dell'APK v4
Android 11 aggiunge il supporto per lo schema di firma dell'APK v4. Questo schema
produce un nuovo tipo di firma in un file separato (apk-name.apk.idsig
), ma
per il resto è simile alle versioni 2 e 3. Non vengono apportate modifiche all'APK. Questo schema supporta
l'installazione incrementale di APK tramite ADB, che velocizza l'installazione dell'APK.
Filtri per intent dinamici
Per ricevere intent, un'app deve dichiarare in fase di compilazione i tipi di dati che è in grado di ricevere definendo un filtro per intent nel manifest dell'app. In Android 10 e versioni precedenti, le app non possono modificare i filtri di intent durante l'esecuzione. Questo è un problema per le app di virtualizzazione (come le macchine virtuali e i desktop remoti) perché non hanno modo di sapere esattamente quale software installerà l'utente al loro interno.
Android 11 introduce i gruppi MIME, un nuovo elemento del manifest che consente a un'app di
dichiarare un insieme dinamico di tipi MIME in un filtro per intent e modificarlo
programmaticamente in fase di runtime. Per utilizzare un gruppo MIME, includi un elemento dati nel 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 e aggiornare i contenuti di un gruppo MIME passando il relativo ID ai seguenti nuovi metodi 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 della compilazione automatica
Android 11 introduce miglioramenti per i servizi di compilazione automatica.
Identificatori dei suggerimenti in AssistStructure.ViewNode
Spesso è utile per i servizi di compilazione automatica calcolare un hash della firma per una vista
in base alle proprietà della vista. Il
suggerimento di visualizzazione è una proprietà
particolarmente utile da includere nel calcolo di un hash di firma, ma la stringa del suggerimento potrebbe
cambiare in base alle impostazioni internazionali dello smartphone. Per risolvere questo problema, Android 11
espande
AssistStructure.ViewNode
con un nuovo
metodo getHintIdEntry()
, che restituisce l'identificatore della risorsa per il testo del suggerimento di una visualizzazione. Questo
metodo fornisce un valore indipendente dalle impostazioni internazionali che puoi utilizzare per calcolare gli hash
delle firme.
Eventi visualizzati dei set di dati
Per aiutare i servizi di compilazione automatica a migliorare i loro suggerimenti, Android 11 offre 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
segnala 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 insieme all'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 le informazioni sensibili come password e numeri di carta di credito, i suggerimenti vengono visualizzati 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 dei contenuti
A partire da Android 11, la tua app può condividere i dati con il servizio di acquisizione dei contenuti del dispositivo. Questa funzionalità consente a un dispositivo di fornire informazioni contestuali, ad esempio mostrando il nome di un brano attualmente in riproduzione nell'ambiente dell'utente.
Per rendere disponibili i dati della tua app al 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.