API di Android 3.1

Livello API: 12

Per gli sviluppatori, la piattaforma Android 3.1 (HONEYCOMB_MR1) è disponibile come componente scaricabile per l'SDK Android. La piattaforma scaricabile include una libreria Android e un'immagine di sistema, oltre a una serie di skin di emulatori e altro ancora. La piattaforma scaricabile non include librerie esterne.

Per gli sviluppatori, la piattaforma Android 3.1 è disponibile come componente scaricabile per l'SDK Android. La piattaforma scaricabile include una libreria Android e un'immagine di sistema, oltre a una serie di skin di emulatori e altro ancora. Per iniziare a sviluppare o testare versioni su Android 3.1, utilizza Android SDK Manager per scaricare la piattaforma nel tuo SDK.

Panoramica dell'API

Le sezioni che seguono forniscono una panoramica tecnica delle novità per gli sviluppatori in Android 3.1, incluse le nuove funzionalità e le modifiche all'API Framework rispetto alla versione precedente.

API USB

Android 3.1 introduce nuove e potenti API per integrare le periferiche connesse con le applicazioni in esecuzione sulla piattaforma. Le API si basano su uno stack USB (Universal Serial Bus) e su servizi integrati nella piattaforma, compreso il supporto delle interazioni tra host e dispositivi USB. Utilizzando le API, gli sviluppatori possono creare applicazioni in grado di scoprire, comunicare con e gestire una varietà di tipi di dispositivi connessi tramite USB.

Lo stack e le API distinguono due tipi di hardware USB, a seconda che il dispositivo Android funzioni come host o l'hardware esterno funzioni come host:

  • Un dispositivo USB è un componente hardware connesso che funge da host in base al dispositivo Android. Ad esempio, la maggior parte dei dispositivi di input, dei mouse e dei joystick sono dispositivi USB, così come molte videocamere, hub e così via.
  • Un accessorio USB è un componente hardware collegato che dispone di un controller host USB, fornisce alimentazione ed è progettato per comunicare con i dispositivi Android tramite USB. È possibile collegare un'ampia gamma di periferiche come accessori, dai controller di robotica ad apparecchiature musicali, cyclette e altro ancora.

Per entrambi i tipi (dispositivi USB e accessori USB), le API USB della piattaforma supportano il rilevamento tramite broadcast di intent quando collegato o scollegato, nonché interfacce, endpoint e modalità di trasferimento standard (controllo, blocco e interruzione).

Le API USB sono disponibili nel pacchetto android.hardware.usb. La classe centrale è UsbManager, che fornisce metodi di supporto per identificare e comunicare sia con dispositivi USB che con accessori USB. Le applicazioni possono acquisire un'istanza di UsbManager e quindi eseguire query per l'elenco di dispositivi o accessori collegati e quindi comunicare con questi dispositivi o gestirli. UsbManager dichiara inoltre le azioni intent che il sistema trasmette per annunciare quando un dispositivo o un accessorio USB viene collegato o scollegato.

Altri corsi includono:

  • UsbDevice, una classe che rappresenta hardware esterno collegato come dispositivo USB (con il dispositivo Android che funge da host).
  • UsbAccessory, che rappresenta l'hardware esterno collegato come host USB (con il dispositivo Android che funge da dispositivo USB).
  • UsbInterface e UsbEndpoint, che forniscono l'accesso alle interfacce USB e agli endpoint standard di un dispositivo.
  • UsbDeviceConnection e UsbRequest, per inviare e ricevere dati e controllare messaggi da o verso un dispositivo USB, in modo sincrono e asincrono.
  • UsbConstants, che fornisce costanti per la dichiarazione dei tipi di endpoint, delle classi di dispositivi e così via.

Tieni presente che, sebbene lo stack USB sia integrato nella piattaforma, il supporto effettivo per le modalità host USB e accessori aperti su dispositivi specifici è determinato dai loro produttori. In particolare, la modalità host si basa sull'hardware del controller USB appropriato nel dispositivo Android.

Inoltre, gli sviluppatori possono richiedere il filtro su Google Play, in modo che le loro applicazioni non siano disponibili per gli utenti i cui dispositivi non forniscono il supporto USB appropriato. Per richiedere l'applicazione di filtri, aggiungi uno o entrambi gli elementi riportati di seguito al file manifest dell'applicazione, in base alle esigenze:

  • Se l'applicazione deve essere visibile solo ai dispositivi che supportano la modalità host USB (connessione di dispositivi USB), dichiara questo elemento:

    <uses-feature android:name="android.hardware.usb.host" android:required="true">

  • Se l'applicazione deve essere visibile solo ai dispositivi che supportano accessori USB (connessione di host USB), dichiara questo elemento:

    <uses-feature android:name="android.hardware.usb.accessory" android:required="true">

Per informazioni complete su come sviluppare applicazioni che interagiscano con gli accessori USB, consulta la documentazione per gli sviluppatori.

Per esaminare le applicazioni di esempio che utilizzano l'API host USB, vedi ADB Test e Missile Launcher

API MTP/PTP

Android 3.1 espone una nuova API MTP che consente alle applicazioni di interagire direttamente con le fotocamere connesse e altri dispositivi PTP. La nuova API consente a un'applicazione di ricevere notifiche quando i dispositivi vengono allegati e rimossi, gestire i file e l'archiviazione su tali dispositivi e trasferire file e metadati da e verso i dispositivi. L'API MTP implementa il sottoinsieme PTP (Picture Transfer Protocol) della specifica MTP (Media Transfer Protocol).

L'API MTP è disponibile nel pacchetto android.mtp e fornisce le seguenti classi:

  • MtpDevice incapsula un dispositivo MTP connesso tramite il bus host USB. Un'applicazione può creare un'istanza di un oggetto di questo tipo e utilizzarne i metodi per ottenere informazioni sul dispositivo e sugli oggetti archiviati al suo interno, nonché per aprire la connessione e trasferire i dati. Ecco alcuni dei metodi:
    • getObjectHandles() restituisce un elenco di handle per tutti gli oggetti sul dispositivo che corrispondono a un formato e a un elemento padre specificati. Per ottenere informazioni su un oggetto, un'applicazione può passare un handle a getObjectInfo().
    • importFile() consente a un'applicazione di copiare i dati per un oggetto in un file nello spazio di archiviazione esterno. Questa chiamata potrebbe bloccarsi per un periodo di tempo arbitrario a seconda delle dimensioni dei dati e della velocità dei dispositivi, pertanto dovrebbe essere effettuata da un thread spearate.
    • open() consente a un'applicazione di aprire un dispositivo MTP/PTP connesso.
    • getThumbnail() restituisce la miniatura dell'oggetto sotto forma di array di byte.
  • MtpStorageInfo contiene informazioni su un'unità di archiviazione su un dispositivo MTP, corrispondenti al set di dati StorageInfo descritto nella sezione 5.2.2 della specifica MTP. I metodi della classe consentono a un'applicazione di ottenere la stringa descrittiva, lo spazio libero, la capacità massima di archiviazione, l'ID di archiviazione e l'identificatore del volume di un'unità di archiviazione.
  • MtpDeviceInfo contiene informazioni su un dispositivo MTP corrispondente al set di dati DeviceInfo descritto nella sezione 5.1.1 della specifica MTP. I metodi della classe consentono alle applicazioni di ottenere il produttore, il modello, il numero di serie e la versione del dispositivo.
  • MtpObjectInfo contiene informazioni su un oggetto memorizzato su un dispositivo MTP, corrispondenti al set di dati ObjectInfo descritto nella sezione 5.3.1 della specifica MTP. I metodi della classe consentono alle applicazioni di ottenere informazioni su dimensioni, formato dei dati, tipo di associazione, data di creazione e miniature di un oggetto.
  • MtpConstants fornisce le costanti per dichiarare i codici del formato di file MTP, il tipo di associazione e lo stato di protezione.

Supporto di nuovi dispositivi di input ed eventi di movimento

Android 3.1 estende il sottosistema di input per supportare nuovi dispositivi di input e nuovi tipi di eventi di movimento in tutte le viste e finestre. Gli sviluppatori possono sfruttare queste funzionalità per consentire agli utenti di interagire con le loro applicazioni utilizzando mouse, trackball, joystick, gamepad e altri dispositivi, oltre a tastiere e touchscreen.

Per gestire l'input del mouse, della rotellina di scorrimento e della trackball, la piattaforma supporta due nuove azioni di eventi di movimento:

  • ACTION_SCROLL, che descrive la posizione del puntatore in cui è stato rilevato un movimento di scorrimento non touch, ad esempio tramite la rotellina del mouse. In MotionEvent, il valore degli assi AXIS_HSCROLL e AXIS_VSCROLL specifica il movimento di scorrimento relativo.
  • ACTION_HOVER_MOVE, indica la posizione corrente del mouse quando non viene premuto alcun pulsante, nonché eventuali punti intermedi dall'ultimo evento HOVER_MOVE. Le notifiche di passaggio al passaggio del mouse di invio e di uscita non sono ancora supportate.

Per supportare joystick e gamepad, la classe InputDevice include queste nuove origini dei dispositivi di input:

Per descrivere gli eventi di movimento provenienti da queste nuove origini, oltre a quelli provenienti da mouse e trackball, la piattaforma ora definisce i codici degli assi su MotionEvent, in modo simile a come definisce i codici chiave su KeyEvent. I nuovi codici di assi per joystick e controller di gioco includono AXIS_HAT_X, AXIS_HAT_Y, AXIS_RTRIGGER, AXIS_ORIENTATION, AXIS_THROTTLE e molti altri. Gli assi MotionEvent esistenti sono rappresentati da AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR e AXIS_ORIENTATION.

Inoltre, MotionEvent definisce un numero di codici generici dell'asse che vengono utilizzati quando il framework non sa come mappare un determinato asse. Dispositivi specifici possono usare i codici generici degli assi per trasmettere dati di movimento personalizzati alle applicazioni. Per un elenco completo degli assi e delle relative interpretazioni, consulta la documentazione della classe MotionEvent.

La piattaforma fornisce eventi di movimento alle applicazioni in batch, quindi un singolo evento può contenere una posizione corrente e più cosiddetti movimenti storici. Le applicazioni devono utilizzare getHistorySize() per ottenere il numero di campioni storici, quindi recuperare ed elaborare tutti i campioni storici in ordine utilizzando getHistoricalAxisValue(). Successivamente, le applicazioni devono elaborare il campione attuale utilizzando getAxisValue().

Alcuni assi possono essere recuperati utilizzando metodi di accesso speciali. Ad esempio, anziché chiamare getAxisValue(), le applicazioni possono chiamare getX(). Gli assi con funzioni di accesso integrate includono AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR e AXIS_ORIENTATION.

Ogni dispositivo di input ha un ID univoco assegnato dal sistema e può anche fornire più origini. Quando un dispositivo fornisce più origini, più di una può fornire dati degli assi utilizzando lo stesso asse. Ad esempio, un evento touch proveniente dall'origine tocco utilizza l'asse X per i dati sulla posizione dello schermo, mentre un evento joystick proveniente dall'origine joystick utilizzerà invece l'asse X per la posizione della levetta. Per questo motivo, è importante che le applicazioni interpretino i valori degli assi in base alla sorgente da cui hanno origine. Quando si gestisce un evento di movimento, le applicazioni devono utilizzare metodi della classe InputDevice per determinare gli assi supportati da un dispositivo o da un'origine. In particolare, le applicazioni possono utilizzare getMotionRanges() per eseguire query su tutti gli assi di un dispositivo o su tutti gli assi di una determinata origine del dispositivo. In entrambi i casi, le informazioni sull'intervallo per gli assi restituiti nell'oggetto InputDevice.MotionRange specificano l'origine di ogni valore dell'asse.

Infine, poiché gli eventi di movimento di joystick, gamepad, mouse e trackball non sono eventi di tocco, la piattaforma aggiunge un nuovo metodo di callback per trasferirli a un View come eventi di movimento "generici". In particolare, segnala gli eventi di movimento non touch a View tramite una chiamata a onGenericMotionEvent(), anziché a onTouchEvent().

La piattaforma invia eventi di movimento generici in modo diverso, a seconda della classe di origine dell'evento. Gli eventi SOURCE_CLASS_POINTER vengono visualizzati nella sezione View sotto il puntatore, in modo simile al funzionamento degli eventi touch. Tutti gli altri vengono assegnati a View attualmente attivo. Ad esempio, questo significa che un View deve concentrarsi per ricevere eventi joystick. Se necessario, le applicazioni possono gestire questi eventi a livello di attività o di dialogo implementando onGenericMotionEvent() lì.

Per esaminare un'applicazione di esempio che utilizza eventi di movimento joystick, consulta GameControllerInput e GameView.

API RTP

Android 3.1 espone un'API al suo stack RTP (Real-time Transport Protocol) integrato, che può essere utilizzato dalle applicazioni per gestire lo streaming di dati on demand o interattivo. In particolare, le app che offrono VOIP, push-to-talk, conferenze e streaming audio possono utilizzare l'API per avviare sessioni e trasmettere o ricevere stream di dati su qualsiasi rete disponibile.

L'API RTP è disponibile nel pacchetto android.net.rtp. I corsi includono:

  • RtpStream, la classe base dei flussi che inviano e ricevono pacchetti di rete con payload multimediali su RTP.
  • AudioStream, una sottoclasse di RtpStream che trasporta i payload audio su RTP.
  • AudioGroup, un hub audio locale per la gestione e il mixaggio dell'altoparlante, del microfono e di AudioStream del dispositivo.
  • AudioCodec, che contiene una raccolta di codec da te definita per un AudioStream.

Per supportare audioconferenze e utilizzi simili, un'applicazione crea un'istanza di due classi come endpoint per lo stream:

  • AudioStream specifica un endpoint remoto ed è costituito dalla mappatura di rete e da un AudioCodec configurato.
  • AudioGroup rappresenta l'endpoint locale per uno o più AudioStream. AudioGroup mescola tutti i AudioStream e, facoltativamente, interagisce con l'altoparlante e il microfono del dispositivo contemporaneamente.

L'utilizzo più semplice prevede un singolo endpoint remoto e un endpoint locale. Per utilizzi più complessi, fai riferimento alle limitazioni descritte per AudioGroup.

Per utilizzare l'API RTP, le applicazioni devono richiedere l'autorizzazione all'utente dichiarando <uses-permission android:name="android.permission.INTERNET"> nei file manifest. Per acquisire il microfono del dispositivo, è necessaria anche l'autorizzazione <uses-permission android:name="android.permission.RECORD_AUDIO">.

Widget di app ridimensionabili

A partire dalla versione 3.1 di Android, gli sviluppatori possono ridimensionare i widget della schermata Home in orizzontale, in verticale o su entrambi gli assi. Gli utenti devono toccare e tenere premuto un widget per visualizzare i punti di manipolazione di ridimensionamento, quindi trascinarli per modificare le dimensioni sulla griglia di layout.

Gli sviluppatori possono rendere ridimensionabile qualsiasi widget della schermata Home definendo un attributo resizeMode nei metadati AppWidgetProviderInfo del widget. I valori dell'attributo resizeMode includono "Horizontal" (orizzontale), "vertical" (verticale) e "none" (nessuno). Per dichiarare un widget come ridimensionabile orizzontalmente e verticalmente, fornisci il valore "Horizontal|vertical".

Ecco un esempio:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical" >
</appwidget-provider>

Per ulteriori informazioni sui widget della schermata Home, consultare la documentazione App Widgets.

Framework animazione

  • Nuova classe ViewPropertyAnimator
    • Una nuova classe ViewPropertyAnimator offre agli sviluppatori un modo comodo per animare le proprietà di selezione su oggetti View. La classe automatizza e ottimizza l'animazione delle proprietà e semplifica la gestione di più animazioni simultanee su un oggetto View.

      L'uso di ViewPropertyAnimator è semplice. Per animare le proprietà di un View, chiama animate() per creare un oggetto ViewPropertyAnimator per tale View. Utilizza i metodi su ViewPropertyAnimator per specificare quale proprietà animare e come farlo. Ad esempio, per applicare la dissolvenza a View in trasparente, chiama alpha(0);. L'oggetto ViewPropertyAnimator gestisce i dettagli della configurazione della classe Animator sottostante, dell'avvio e del rendering dell'animazione.

  • Colore di sfondo dell'animazione
    • I nuovi metodi getBackgroundColor() e setBackgroundColor(int) consentono di ottenere/impostare il colore di sfondo delle animazioni, solo per le animazioni delle finestre. Al momento lo sfondo deve essere nero con qualsiasi livello alfa desiderato.
  • Recupero della frazione animata da ViewAnimator
    • Un nuovo metodo getAnimatedFraction() ti consente di ottenere la frazione di animazione attuale, la frazione trascorsa/interpolata utilizzata nell'aggiornamento dei frame più recente, da un valore ValueAnimator.

Framework UI

  • Rendering forzato di un livello.
    • Un nuovo metodo buildLayer() consente a un'applicazione forzare la creazione di un livello vista e il rendering della vista immediatamente al suo interno. Ad esempio, un'applicazione può utilizzare questo metodo per eseguire il rendering di una vista nel suo livello prima di avviare un'animazione. Se la vista è complessa, eseguendo il rendering nel livello prima di avviare l'animazione eviterai di saltare i frame.
  • Distanza fotocamera
    • Le applicazioni possono utilizzare un nuovo metodo setCameraDistance(float) per impostare la distanza dalla fotocamera a una vista. In questo modo le applicazioni hanno un controllo migliorato sulle trasformazioni 3D della vista, come le rotazioni.
  • Recupero di una visualizzazione del calendario da un selettore di data
  • Ricevi callback quando le viste vengono scollegate
  • Listener breadcrumb del frammento, nuova firma onInflate()
  • Mostra i risultati di ricerca in una nuova scheda.
    • Una chiave dati EXTRA_NEW_SEARCH per gli intent ACTION_WEB_SEARCH ti consente di aprire una ricerca in una nuova scheda del browser, anziché in una scheda esistente.
  • Cursore di testo disegnabile
    • Ora puoi specificare un disegno da utilizzare come cursore di testo utilizzando il nuovo attributo risorsa textCursorDrawable.
  • Impostazione secondaria mostrata per le visualizzazioni remote
  • Tasti generici per gamepad e altri dispositivi di input
    • KeyEvent aggiunge una serie di codici chiave generici per supportare i pulsanti del gamepad. La classe aggiunge anche isGamepadButton(int) e diversi altri metodi helper per lavorare con i codici chiave.

Grafica

  • Risorse per la gestione delle bitmap
    • setHasAlpha(boolean) consente a un'app di indicare che tutti i pixel in una bitmap sono noti per essere opachi (false) o che alcuni pixel possono contenere valori alfa non opachi (true). Nota: per alcune configurazioni (ad esempio RGB_565) questa chiamata viene ignorata, poiché non supporta i valori alfa per pixel. Questo è inteso come suggerimento di disegno, poiché in alcuni casi una bitmap nota per essere opaca può richiedere un disegno più veloce rispetto a una mappa con valori alfa per pixel non opachi.
    • getByteCount() ottiene le dimensioni di una bitmap in byte.
    • getGenerationId() consente a un'applicazione di scoprire se una bitmap è stata modificata, ad esempio per la memorizzazione nella cache.
    • sameAs(android.graphics.Bitmap) determina se una determinata bitmap è diversa dalla bitmap attuale in termini di dimensioni, configurazione o dati in pixel.
  • Impostazione della posizione e della rotazione della videocamera
    • Camera aggiunge due nuovi metodi rotate() e setLocation() per il controllo della posizione della videocamera, per le trasformazioni 3D.

Rete

  • Blocco del Wi-Fi ad alte prestazioni
    • Un nuovo blocco Wi-Fi ad alte prestazioni consente alle applicazioni di mantenere connessioni Wi-Fi ad alte prestazioni anche quando lo schermo del dispositivo è spento. Le applicazioni che riproducono musica, video o voce per lunghi periodi di tempo possono acquisire il blocco del Wi-Fi ad alte prestazioni per garantire prestazioni di streaming anche quando lo schermo è spento. Poiché utilizza più energia, le applicazioni devono acquisire la connessione Wi-Fi ad alte prestazioni quando è necessaria una connessione attiva a lunga esecuzione.

      Per creare un blocco ad alte prestazioni, passa WIFI_MODE_FULL_HIGH_PERF come modalità di blocco in una chiamata a createWifiLock().

  • Altre statistiche sul traffico
    • Le applicazioni possono ora accedere alle statistiche su più tipi di utilizzo della rete usando nuovi metodi in TrafficStats. Le applicazioni possono utilizzare i metodi per ottenere statistiche UDP, conteggio dei pacchetti, byte di payload di trasmissione/ricezione TCP e segmenti per un determinato UID.
  • Nome utente autenticazione SIP

Gestione dei download

  • Gestione dei download completati
  • Mostra i download ordinati per dimensione

Framework IME

  • Recupero della chiave del valore aggiuntivo di un metodo di immissione

Contenuti multimediali

  • Nuovi formati audio in streaming
    • Il framework multimediale aggiunge il supporto integrato per i contenuti ADTS AAC non elaborati, per un audio in streaming migliorato, nonché il supporto per l'audio FLAC, per contenuti audio compressi di massima qualità (senza perdita di dati). Per ulteriori informazioni, consulta il documento Formati multimediali supportati.

Controlli di avvio sulle app interrotte

A partire da Android 3.1, il gestore di pacchetti del sistema tiene traccia delle applicazioni in stato di interruzione e fornisce un mezzo per controllare il loro avvio da processi in background e altre applicazioni.

Tieni presente che lo stato Arrestata di un'applicazione non corrisponde allo stato Arrestata di un'attività. Il sistema gestisce questi due stati di interruzione separatamente.

La piattaforma definisce due nuovi flag di intent che consentono a un mittente di specificare se l'intent deve essere autorizzato ad attivare componenti nell'applicazione arrestata.

Quando nessuno di questi flag o entrambi i flag sono stati definiti in un intent, il comportamento predefinito prevede l'inclusione dei filtri delle applicazioni interrotte nell'elenco dei potenziali target.

Tieni presente che il sistema aggiunge FLAG_EXCLUDE_STOPPED_PACKAGES a tutti gli intent trasmissioni. Ciò avviene per evitare che le trasmissioni dai servizi in background avviino inavvertitamente o inutilmente componenti delle applicazioni arrestate. Un'applicazione o un servizio in background possono ignorare questo comportamento aggiungendo il flag FLAG_INCLUDE_STOPPED_PACKAGES agli intent di trasmissione che dovrebbero essere autorizzati ad attivare le applicazioni arrestate.

Le applicazioni sono in stato di arresto quando vengono installate per la prima volta ma non sono ancora state avviate, oppure quando vengono arrestate manualmente dall'utente (in Gestisci applicazioni).

Notifica del primo avvio e dell'upgrade dell'applicazione

La piattaforma aggiunge una notifica migliorata del primo lancio dell'applicazione e degli upgrade tramite due nuove azioni intent:

  • ACTION_PACKAGE_FIRST_LAUNCH: inviato al pacchetto di installazione di un'applicazione al primo avvio dell'applicazione (ovvero la prima volta che l'applicazione viene spostata dallo stato di arresto). I dati contengono il nome del pacchetto.
  • ACTION_MY_PACKAGE_REPLACED: comunica a un'applicazione che è stata aggiornata con una nuova versione installata su una versione esistente. Viene inviato solo all'applicazione che è stata sostituita. Non contiene dati aggiuntivi. Per riceverla, dichiara un filtro per intent per questa azione. Puoi utilizzare l'intent per attivare il codice che aiuta a ripristinare la corretta esecuzione dell'applicazione dopo un upgrade.

    Questo intent viene inviato direttamente all'applicazione, ma solo se è stato eseguito l'upgrade dell'applicazione mentre era in stato avviato (non in stato arrestato).

Utilità di base

  • Cache LRU
    • Una nuova classe LruCache consente alle applicazioni di trarre vantaggio da una memorizzazione nella cache efficiente. Le applicazioni possono utilizzare la classe per ridurre il tempo dedicato al calcolo o al download dei dati dalla rete, mantenendo al contempo un ingombro ragionevole per i dati memorizzati nella cache.LruCache è una cache che contiene forti riferimenti a un numero limitato di valori. Ogni volta che si accede a un valore, questo viene spostato in cima a una coda. Quando un valore viene aggiunto a una cache completa, il valore alla fine della coda viene rimosso e potrebbe diventare idoneo per la garbage collection.
  • Descrittore del file come int

WebKit

  • Cookie dello schema file
    • CookieManager ora supporta i cookie che utilizzano lo schema URI file:. Puoi utilizzare setAcceptFileSchemeCookies() per attivare/disattivare il supporto dei cookie di schema file prima di creare un'istanza di WebView o CookieManager. In un'istanza CookieManager, puoi verificare se i cookie dello schema file sono abilitati chiamando allowFileSchemeCookies().
  • Notifica della richiesta di accesso
    • Per supportare le funzionalità di accesso automatico del browser introdotte in Android 3.0, il nuovo metodo onReceivedLoginRequest() comunica all'applicazione host che è stata elaborata una richiesta di accesso automatico per l'utente.
  • Classi e interfacce rimosse
    • Diverse classi e interfacce sono state rimosse dall'API pubblica dopo il precedente stato deprecato. Per ulteriori informazioni, consulta il report Differenze API.

Browser

L'applicazione Browser aggiunge le seguenti funzionalità per supportare le applicazioni web:

  • Supporto per la riproduzione in linea dei video incorporati nel tag HTML5 <video>. La riproduzione è con accelerazione hardware quando possibile.
  • Supporto del livello per elementi con posizione fissa per tutti i siti (dispositivi mobili e desktop).

Nuove costanti funzionalità

La piattaforma aggiunge nuove costanti di funzionalità hardware che gli sviluppatori possono dichiarare nei propri manifest dell'applicazione, per informare entità esterne come Google Play del requisito dell'applicazione di nuove funzionalità hardware supportate in questa versione della piattaforma. Gli sviluppatori dichiarano queste e altre costanti delle funzionalità negli elementi manifest di <uses-feature>.

Google Play filtra le applicazioni in base alle funzionalità dichiarate negli elementi manifest di <uses-feature>. Per ulteriori informazioni su come dichiarare le funzionalità in un file manifest dell'applicazione, consulta la pagina Filtri di Google Play.

Report Differenze API

Per una visualizzazione dettagliata di tutte le modifiche all'API in Android 3.1 (Livello API 12), consulta il Report sulle differenze API.

Livello API

La piattaforma Android 3.1 offre una versione aggiornata dell'API framework. All'API Android 3.1 viene assegnato un identificatore intero (12) memorizzato nel sistema stesso. Questo identificatore, chiamato "livello API", consente al sistema di determinare correttamente se un'applicazione è compatibile con il sistema prima di installarla.

Per utilizzare nella tua applicazione le API introdotte in Android 3.1, devi compilare l'applicazione in base alla libreria Android fornita nella piattaforma Android 3.1 SDK. A seconda delle tue esigenze, potrebbe essere necessario aggiungere anche un attributo android:minSdkVersion="12" all'elemento <uses-sdk> nel file manifest dell'applicazione.

Per ulteriori informazioni, consulta Che cos'è il livello API?