Panoramica di funzionalità e API

Android 11 introduce nuove fantastiche funzionalità e API per gli sviluppatori. Le sezioni riportate di seguito ti aiutano a scoprire le funzionalità per le tue app e a iniziare a utilizzare le API correlate.

Per un elenco dettagliato delle API nuove, modificate e rimosse, leggi il report Differenze API. Per maggiori dettagli sulle nuove API, visita il Riferimento API Android: le nuove API sono evidenziate per visibilità. Inoltre, per conoscere le aree in cui le modifiche alla piattaforma potrebbero influire sulle tue app, assicurati di controllare i cambiamenti 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 dei dispositivi nel menu del tasto di accensione di Android. Per maggiori informazioni, vedi 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 vengono organizzate in un carosello a scorrimento che include stream riprodotti localmente sul telefono, stream remoti, come quelli rilevati su dispositivi esterni o sessioni di trasmissione, e sessioni precedenti e ripristinabili nell'ordine in cui sono state riprodotte le ultime.

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 come di consueto.

Per ulteriori informazioni, vedi Controlli multimediali.

Schermi

Supporto migliorato per i display a cascata

Android 11 fornisce diverse API per supportare i display a cascata, che avvolgono il bordo del dispositivo. Questi display vengono considerati come una variante di display con ritagli. I metodi DisplayCutout.getSafeInset…() esistenti ora restituiscono il riquadro sicuro per evitare aree a cascata e ritagli. Per visualizzare i contenuti dell'app nella struttura a cascata:

  • Chiama DisplayCutout.getWaterfallInsets() per ottenere le dimensioni esatte del riquadro a cascata.

  • Imposta l'attributo di layout della finestra layoutInDisplayCutoutMode su LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS per consentire alla finestra di estendersi nelle aree di ritaglio e cascata su tutti i bordi dello schermo. Devi assicurarti che non siano presenti contenuti essenziali nelle aree di ritaglio o di cascata.

Sensore dell'angolo della cerniera e pieghevoli

Android 11 consente alle app in esecuzione su dispositivi con configurazioni dello schermo basate su cerniera 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 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'importanza speciale e gli utenti hanno a disposizione diverse nuove opzioni per l'interazione.

Per ulteriori informazioni sulle conversazioni e su come l'app può supportarle, vedi Persone e conversazioni.

Bolle di Chat

Le Bolle sono ora disponibili per gli sviluppatori per aiutare gli sviluppatori a far emergere le conversazioni in tutto il sistema. Le bolle era una funzionalità sperimentale di 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 di conversazione. In particolare, la notifica deve essere associata a una scorciatoia.

Prima di Android 11, per visualizzare una notifica con le bolle, dovevi specificare esplicitamente che la notifica era impostata per l'avvio sempre in modalità UI documento. A partire da Android 11, non è più necessario fare esplicitamente questa impostazione: se la notifica viene visualizzata in bolle, la piattaforma imposta automaticamente la notifica in modo che venga avviata sempre in modalità UI del documento.

Sono stati apportati diversi miglioramenti alle prestazioni delle bolle e gli utenti hanno una maggiore flessibilità nell'attivazione e 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:

Indicatori visivi 5G

Per informazioni sulla visualizzazione degli indicatori 5G sui dispositivi degli utenti, vedi Comunicare agli utenti quando utilizzano il 5G.

Privacy

Android 11 introduce un numero elevato di modifiche e limitazioni per migliorare la privacy degli utenti. Per ulteriori informazioni, 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 Jetpack biometrica.

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 che l'utente ha eseguito l'autenticazione, puoi verificare se l'utente si è autenticato utilizzando una credenziale del dispositivo o una credenziale biometrica chiamando getAuthenticationType().

Supporto aggiuntivo per le chiavi di autenticazione per uso

Android 11 offre maggiore supporto per l'autenticazione mediante chiavi di autenticazione per uso.

Metodi deprecati

Android 11 ritira i seguenti metodi:

  • Il metodo setDeviceCredentialAllowed().
  • Il metodo setUserAuthenticationValidityDurationSeconds().
  • La versione con sovraccarico di canAuthenticate() che non accetta argomenti.

Condivisione sicura di grandi set di dati

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, 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 su disco, Android 11 consente di memorizzare nella cache questi grandi set di dati sul dispositivo tramite 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.

Esegui la crittografia basata su file dopo un riavvio OTA senza credenziali utente

Dopo il completamento di un aggiornamento OTA e il riavvio del dispositivo, le chiavi con credenziali criptate inserite nello spazio di archiviazione protetto da credenziali diventano immediatamente disponibili per le operazioni di crittografia basata su file (FBE). Ciò significa che, dopo un aggiornamento OTA, l'app può riprendere le operazioni che richiedono le chiavi 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 dell'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 senza dover affrontare problemi di connessione USB comuni, come l'installazione dei driver. Per maggiori informazioni, vedi Eseguire app su un dispositivo hardware.

Installazione dell'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 dell'APK ADB (Android Debug Bridge) accelera questo processo installando una quantità di APK sufficiente per avviare l'app durante lo streaming dei dati rimanenti in background. adb install userà automaticamente questa funzionalità se è supportata dal dispositivo e se hai installato la versione più recente di SDK Platform-Tools. Se non è supportato, viene utilizzato il metodo di installazione predefinito in modalità invisibile.

Usa il seguente comando adb per usare la funzionalità. Se il dispositivo non supporta l'installazione incrementale, il comando non riesce e stampa una spiegazione dettagliata.

adb install --incremental

Prima di eseguire un'installazione incrementale di un APK ADB, devi firmare l'APK e creare un file dello schema di firma dell'APK v4. Affinché questa funzionalità possa funzionare, il file della firma della versione 4 deve essere posizionato accanto all'APK.

Rilevamento degli errori mediante l'allocatore di memoria nativo

GWP-ASan è una funzionalità nativa per l'allocazione della memoria che aiuta a trovare bug use-after-free e heap-buffer-overflow. Puoi attivare 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.

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 NDK Thermal

Quando i dispositivi si scaldano troppo, potrebbero limitare la CPU e/o la GPU e questo può influire sulle app in modi imprevisti. Problemi relativi ad app o giochi che incorporano grafica complessa, calcoli intensivi o attività di rete sostenuta.

Utilizza l'API NDK Thermal in Android 11 per monitorare le variazioni di temperatura sul dispositivo, quindi intervieni per mantenere un consumo di energia inferiore e la temperatura del dispositivo più bassa. Questa API è simile all'API Java Thermal; puoi utilizzarla per ricevere notifiche relative a qualsiasi cambiamento dello stato termico o per ricercare direttamente lo stato attuale.

Testo e immissione

Transizioni IME migliorate

Android 11 introduce nuove API per migliorare le transizioni per gli editor dei metodi di immissione (IME), come le tastiere sullo schermo. Queste API semplificano la sincronizzazione dei contenuti dell'app con l'aspetto e la scomparsa dell'IME, nonché con altri elementi come le barre di stato e di navigazione.

Per mostrare un IME mentre qualsiasi EditText è attivo, chiama view.getInsetsController().show(Type.ime()). (Puoi richiamare questo metodo in qualsiasi vista nella stessa gerarchia dell'elemento EditText attivo, non devi richiamarlo nello specifico EditText). Per nascondere l'IME, chiama view.getInsetsController().hide(Type.ime()). Puoi verificare 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 per una vista 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() del listener, quindi chiama onStart() all'inizio della transizione. Quindi chiama onProgress() a ogni avanzamento nella transizione. Al termine della transizione, l'IME chiama onEnd(). In qualsiasi momento della transizione, puoi verificare 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 IME o l'animazione di un'altra barra di sistema, come la barra di navigazione. Per farlo, devi prima chiamare setOnApplyWindowInsetsListener() per impostare un nuovo listener per le modifiche agli intervalli di 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 di 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 aggiornati sulle impostazioni internazionali CLDR 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 è stata migliorata con una classe Builder, il supporto per il tipo java.util.Locale e una classe di risultati con dati aggiuntivi su una corrispondenza.
  • Ora Unicode 13 è supportato.

Contenuti multimediali

Allocazione dei buffer MediaCodec

Android 11 include le nuove API MediaCodec che offrono alle app un maggiore controllo nell'allocazione dei buffer di input e output. Ciò consente alla tua app di gestire la memoria in modo più efficiente.

Nuovi corsi:
Nuovi metodi:

Inoltre, è cambiato il comportamento di due metodi in MediaCodec.Callback():

onInputBufferAvailable()
Anziché chiamare MediaCodec.getInputBuffer() e MediaCodec.queueInputBuffer() con l'indice, se configurato per usare l'API Block Model, le app devono usare MediaCodec.getQueueRequest con l'indice, collegando un LinearBlock/HardwareBuffer allo slot.
onOutputBufferAvailable()
Anziché chiamare MediaCodec.getOutputBuffer() con l'indice, le app possono usare MediaCodec.getOutputFrame() con l'indice per ottenere l'oggetto OutputFrame 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 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:

Nuova funzione AAudio AAudioStream_release()

La funzione AAudioStream_close() consente di rilasciare e chiudere uno stream audio contemporaneamente. Questo può essere pericoloso. Se un altro processo tenta di accedere al flusso dopo averlo chiuso, si arresta in modo anomalo.

La nuova funzione AAudioStream_release() rilascia lo stream, ma non lo chiude. In questo modo le risorse vengono liberate e il flusso rimane in uno stato 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 controllo aggiuntivo sulla funzionalità di estrazione dei contenuti multimediali.

Acquisizione 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", 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 abilitano e disabilitano la possibilità di acquisire contemporaneamente indipendentemente dal caso d'uso selezionato. Consulta l'articolo Condividere l'input audio.

Selettore di output

Android 11 implementa un nuovo comportamento per le app che usano le API Cast e Mediarouter.

Oltre ad accedere alle opzioni di trasmissione dall'interno di un'app, queste opzioni vengono visualizzate anche nel media player del sistema. Ciò aiuta a offrire all'utente un percorso fluido quando si sposta da un dispositivo all'altro, modificando il contesto di visualizzazione e ascolto, ad esempio guardando il video in cucina anziché sullo smartphone oppure ascoltando l'audio a casa o in auto. Vedi il selettore di output.

Connettività

Miglioramenti del punto di accesso Wi-Fi

Per informazioni sulle funzionalità di Passpoint aggiunte in Android 11, consulta Passpoint.

L'API Wi-Fi Suggestion è espansa

Android 11 espande l'API Wi-Fi Suggestion per migliorare le funzionalità di gestione della rete della tua app, ad esempio:

  • 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 di Analytics ti consentono di ottenere informazioni sulla qualità delle tue reti.

Aggiornamenti su 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 nei dettagli delle chiamate per le chiamate in arrivo.

Se un CallScreeningService possiede l'autorizzazione READ_CONTACTS , l'app riceve una notifica quando arrivano chiamate da un numero nei contatti dell'utente o in uscita verso un numero.

Per maggiori informazioni, vedi Prevenire lo spoofing dell'ID chiamante.

Apri gli aggiornamenti dell'API Mobile

Per informazioni sul supporto di OMAPI su Android 11 e versioni successive, vedi Aprire il supporto del lettore API mobile.

VPN ad alte prestazioni

Le app che hanno come target il livello API 30 e versioni successive o che sono in esecuzione su dispositivi lanciati con livello API 29 e versioni successive possono applicare IKEv2/IPsec alle VPN sia per VPN configurate dall'utente che basate su app.

Le VPN vengono eseguite in modo nativo del sistema operativo, semplificando il codice necessario per stabilire le connessioni VPN IKEv2/IPsec in un'app.

Controllo dell'accesso di rete per processo

Per informazioni sull'abilitazione dell'accesso alla rete in base a ogni processo, vedi Gestire l'utilizzo della rete.

Consenti più configurazioni di 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 Mobile Country Code (Centro clienti) e MNC (Mobile Network Code) sulla propria rete, ma ha un solo FQDN. Su Android 11 e versioni successive, è possibile installare più di un profilo con lo stesso nome di dominio completo che corrisponde alla rete del provider principale quando l'utente installa una SIM con Centro clienti o MNC.

Supporto dell'antenna GNSS

Android 11 introduce la classe GnssAntennaInfo, che consente alla tua app di utilizzare meglio il posizionamento con precisione al centimetro offerto dal sistema globale di navigazione satellitare (GNSS).

Scopri di più nella guida sulle informazioni sulla calibrazione dell'antenna.

Grafica

Decoder di immagini NDK

L'API NDK ImageDecoder fornisce un'API standard per le app per Android C/C++ 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 dei decoder di immagini.

API Frame rate

Android 11 fornisce un'API che consente alle app di comunicare al sistema la frequenza fotogrammi desiderata, per ridurre il judder sui dispositivi che supportano più frequenze di aggiornamento. Per informazioni su come utilizzare questa API, consulta la guida alla frequenza fotogrammi.

Richiesta e verifica del supporto della bassa latenza

Alcuni display possono eseguire la post-elaborazione della grafica, come alcuni display esterni e le TV. Questa post-elaborazione migliora la grafica, ma può aumentare la latenza. I display più recenti che supportano HDMI 2.1 dispongono di una modalità a bassa latenza automatica (ALLM, nota anche come modalità di gioco), che riduce al minimo la latenza disattivando questa post-elaborazione. Per ulteriori dettagli sull'ALLM, consulta la specifica HDMI 2.1.

Una finestra può richiedere l'utilizzo della modalità automatica a bassa latenza, se disponibile. Gli ALLM sono particolarmente utili per applicazioni come giochi e videoconferenze, in cui una 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 una post-elaborazione minima; per scoprire se è supportata da un determinato display, chiama il nuovo metodo Display.isMinimalPostProcessingSupported().

Iniezione del livello di debug della grafica a prestazioni

Ora le applicazioni 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 incorrere in overhead delle prestazioni. Questa funzionalità è particolarmente importante quando si esegue la profilazione della propria applicazione con strumenti come GAPID. Per profilare la tua app, includi il seguente elemento meta-data 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 suoni e vibrazioni delle notifiche durante l'acquisizione attiva

A partire dal rilascio di Android 11, l'app può disattivare solo l'audio delle vibrazioni, dei suoni e delle vibrazioni o nessuna delle due utilizzando setCameraAudioRestriction() quando usi attivamente la fotocamera.

Supporto della fotocamera esteso nell'emulatore Android

Per informazioni sul supporto esteso per le fotocamere nell'emulatore a partire da Android 11, consulta la pagina Supporto per la fotocamera.

Supporto per l'uso simultaneo di più videocamere

Android 11 aggiunge API al supporto delle query per l'utilizzo di più di una fotocamera contemporaneamente, inclusa una fotocamera anteriore e posteriore.

Per verificare il supporto sul dispositivo su cui è in esecuzione la tua app, utilizza i seguenti metodi:

  • getConcurrentCameraIds() restituisce un Set di combinazioni di ID videocamera che possono trasmettere in streaming contemporaneamente con combinazioni di stream garantiti quando configurati dallo stesso processo di applicazione.
  • isConcurrentSessionConfigurationSupported() esegue una query se i dispositivi fotocamera 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 elemento AnimatedImageDrawable contenente l'intera sequenza di immagini. Nelle versioni precedenti di Android, il metodo restituiva un valore BitmapDrawable di un singolo frame.

Se la grafica HEIF contiene più frame che non sono in sequenza, puoi recuperare un singolo frame richiamando 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 all'utente ora consente l'utilizzo di HTML e immagini oltre al testo normale. Questa flessibilità ti consente di spiegare più facilmente agli utenti finali cosa fa il tuo servizio e in che modo può aiutarli.
  • Per lavorare con una descrizione dello stato di un elemento UI più semanticamente significativo di contentDescription, chiama il metodo getStateDescription().
  • Per richiedere che gli eventi touch ignorino l'esplorazione touch del sistema, chiama setTouchExplorationPassthroughRegion(). Analogamente, per richiedere che i gesti ignorino il rilevamento dei gesti del sistema, chiama setGestureDetectionPassthroughRegion().
  • Puoi richiedere azioni IME, come "Invio" e "Avanti", nonché screenshot delle finestre che non attivano il flag FLAG_SECURE.

Altre funzionalità

Motivi uscita dal processo dell'app

Android 11 introduce il metodo ActivityManager.getHistoricalProcessExitReasons(), che segnala i motivi di eventuali recenti terminazioni dei processi. Le app possono utilizzare questo metodo per raccogliere informazioni diagnostiche sugli arresti anomali, ad esempio se un'interruzione di un processo è dovuta ad ANR, problemi di memoria o altri motivi. Inoltre, puoi utilizzare il nuovo metodo setProcessStateSummary() per archiviare informazioni sullo stato personalizzate per analisi successive.

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 perché il processo della tua app è stato interrotto. Ad esempio, un valore restituito REASON_CRASH indica che si è verificata un'eccezione non gestita nella tua app. Se la tua 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 maggiori 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 responsabili principalmente della fornitura delle nuove 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 di Resources di un'app. A turno, gli oggetti ResourcesProvider forniscono metodi per caricare i dati delle risorse da APK e tabelle di risorse.

Un caso d'uso principale per questa API è il caricamento degli asset personalizzati. Puoi utilizzare loadFromDirectory() per creare un ResourcesProvider che reindirizzi la risoluzione di risorse e asset basati su file, eseguendo ricerche 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 con gli asset raggruppati 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 è simile a v2 e v3. Non vengono apportate modifiche all'APK. Questo schema supporta l'installazione incrementale dell'APK ADB, che velocizza l'installazione dell'APK.

Filtri per intent dinamici

Per ricevere intent, un'app deve dichiarare al momento della compilazione quali tipi di dati può ricevere definendo un filtro di intent nel file manifest dell'app. In Android 10 e versioni precedenti, le app non possono modificare i filtri per intent in fase di runtime. Questo è 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 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 e aggiornare i contenuti di un gruppo MIME passandone l'ID ai seguenti nuovi metodi nella classe 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 ai servizi di compilazione automatica.

Identificatori di suggerimenti in Assiststructure.ViewNode

Spesso è utile per i servizi di compilazione automatica calcolare un hash di firma per una vista in base alle relative proprietà. Il hint vista è una proprietà particolarmente buona da includere quando si calcola un hash di firma, ma la stringa del suggerimento potrebbe cambiare con le impostazioni internazionali del telefono. Per risolvere il problema, Android 11 espande AssistStructure.ViewNode con un nuovo metodo getHintIdEntry(), che restituisce l'identificatore di risorsa per il testo del suggerimento di una vista. Questo metodo fornisce un valore indipendente dalle impostazioni internazionali che puoi utilizzare per calcolare gli hash di firma.

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 li ha selezionati. 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

Ora le tastiere e gli altri IME possono visualizzare i suggerimenti di compilazione automatica in linea, in una striscia di 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 dei contenuti

A partire da Android 11, la tua app può condividere dati con il servizio di acquisizione dei contenuti del dispositivo. Questa funzionalità semplifica la fornitura da parte di un dispositivo di 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 del file di sola scrittura da condividere con il servizio di acquisizione dei contenuti.