API per Android 3.0

Livello API: 11

Per gli sviluppatori, la piattaforma Android 3.0 (HONEYCOMB) è disponibile come file scaricabile per l'SDK Android. La piattaforma scaricabile include una libreria e un sistema Android oltre a una serie di skin di emulazione e altro ancora. La piattaforma scaricabile non include librerie.

Per gli sviluppatori, la piattaforma Android 3.0 è disponibile sotto forma di componente scaricabile per l'SDK Android. La piattaforma scaricabile include una libreria Android e un'immagine di sistema, nonché una serie di skin di emulazione altro ancora. Per iniziare a sviluppare o testare soluzioni rispetto ad Android 3.0, usa Android SDK Manager per scaricare la piattaforma nell'SDK.

Panoramica dell'API

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

Frammenti

Un frammento è un nuovo componente del framework che consente di separare elementi distinti di un l'attività in moduli autonomi che definiscono la propria UI e il proprio ciclo di vita. Per creare un devi estendere la classe Fragment e implementare diversi cicli di vita metodi di callback, simili a quelli di Activity. Puoi quindi combinare più in una singola attività per creare una UI a più riquadri in cui gestisce il proprio ciclo di vita e gli input utente.

Puoi anche utilizzare un frammento senza fornire una UI e utilizzare invece il frammento come worker per l'attività, ad esempio per gestire l'avanzamento di un download che si verifica solo mentre è in corso l'attività.

Inoltre:

  • I frammenti sono autonomi e possono essere riutilizzati in più attività
  • Puoi aggiungere, rimuovere, sostituire e animare frammenti all'interno dell'attività
  • Puoi aggiungere frammenti a un back stack gestito dall'attività, mantenendo lo stato quando vengono modificati e consentono all'utente di spostarsi a ritroso stati
  • Fornendo layout alternativi, puoi combinare e abbinare frammenti, in base sulla dimensione dello schermo e sull'orientamento
  • I frammenti hanno accesso diretto all'attività del contenitore e possono contribuire agli elementi alla Barra delle azioni dell'attività (parlata di seguito)

Per gestire i frammenti nella tua attività, devi utilizzare FragmentManager, che fornisce diverse API per l'interazione con i frammenti, come come il rilevamento di frammenti nell'attività e l'estrazione di frammenti dallo stack posteriore per ripristinare stato precedente.

Per eseguire una transazione, come aggiungere o rimuovere un frammento, devi creare un FragmentTransaction. Dopodiché puoi chiamare metodi come add() remove() o replace(). Una volta applicate tutte le le modifiche che vuoi eseguire per la transazione, devi chiamare commit() e il sistema applica la transazione del frammento a l'attività.

Per ulteriori informazioni sull'utilizzo dei frammenti, leggi la documentazione relativa ai frammenti. Diversi campioni sono disponibili anche in API Demos.

Barra delle azioni

La barra delle azioni sostituisce la tradizionale barra del titolo nella parte superiore della finestra delle attività. Include il logo dell'applicazione nell'angolo a sinistra e offre una nuova interfaccia per gli elementi nel Menu Opzioni. Inoltre, La barra delle azioni ti consente di:

  • Aggiungi le voci di menu direttamente nella barra delle azioni come "attività".

    Nella dichiarazione XML relativa alla voce di menu, includi l'attributo android:showAsAction con il valore "ifRoom". Quando lo spazio è sufficiente, il menu viene visualizzato direttamente nella barra delle azioni. In caso contrario, l'elemento viene inserito menu extra, mostrato dall'icona del menu sul lato destro della barra delle azioni.

  • Sostituire un'attività con un widget (ad esempio una casella di ricerca), creando una "visualizzazione azione."

    Nella dichiarazione XML relativa alla voce di menu, aggiungi l'attributo android:actionViewLayout con una risorsa di layout o l'attributo android:actionViewClass con il nome della classe di widget. Devi anche dichiarare l'attributo android:showAsAction in modo che l'articolo venga visualizzato nella barra delle azioni. Se non c'è abbastanza spazio nella barra delle azioni e l'elemento viene visualizzato nella menu extra, si comporta come una normale voce di menu e non mostra il widget.

  • Aggiungi un'azione al logo dell'applicazione e sostituiscila con un logo personalizzato

    Al logo dell'applicazione viene assegnato automaticamente l'ID android.R.id.home, che il sistema fornisce al callback onOptionsItemSelected() dell'attività quando viene toccato. Rispondi a questo ID nel callback per eseguire un'azione come andare alla "home page" dell'applicazione attività.

    Per sostituire l'icona con un logo, specifica il logo della tua applicazione nel file manifest con il android:logo quindi richiama setDisplayUseLogoEnabled(true) nella tua attività.

  • Aggiungi breadcrumb per spostarti indietro nello stack posteriore di frammenti
  • Aggiungi schede o un elenco a discesa per navigare tra i frammenti
  • Personalizza la barra delle azioni con temi e sfondi

La barra delle azioni è la barra standard per tutte le applicazioni che utilizzano il nuovo tema olografico, anche standard quando imposti android:minSdkVersion o android:targetSdkVersion su "11".

Per ulteriori informazioni sulla barra delle azioni, leggi la documentazione relativa alla barra delle azioni. Diversi campioni sono disponibili anche in API Demos.

Appunti di sistema

Ora le applicazioni possono copiare e incollare dati (oltre il semplice testo) da e verso l'intero sistema appunti. I dati troncati possono essere testo normale, URI o intent.

Fornendo al sistema l'accesso ai dati che l'utente deve copiare tramite un fornitore di contenuti, l'utente può copiare contenuti complessi (ad esempio un'immagine o una struttura di dati) dalla tua applicazione e incollarlo in un'altra applicazione che supporta quel tipo di contenuti.

Per iniziare a utilizzare gli appunti, recupera l'oggetto ClipboardManager globale chiamando il numero getSystemService(CLIPBOARD_SERVICE).

Per copiare un elemento negli appunti, devi creare un nuovo oggetto ClipData che contenga uno o più ClipData.Item di oggetti, ognuno dei quali descrive una singola entità. Per creare un oggetto ClipData contenente un solo ClipData.Item, puoi usare uno dei metodi helper, come newPlainText(), newUri() e newIntent(), che restituiscono ognuno un oggetto ClipData precaricato con ClipData.Item forniti da te.

Per aggiungere ClipData agli appunti, passalo a setPrimaryClip() per la tua istanza di ClipboardManager.

Potrai quindi leggere un file dagli appunti (per incollarlo) richiamando getPrimaryClip() su ClipboardManager. Puoi gestire i ClipData che ricevi complicata e devi assicurarti di poter gestire il tipo di dati negli appunti prima di tentare di incollarlo.

Gli appunti contengono solo un dato troncato (un ClipData ) alla volta, ma un singolo ClipData può contenere più ClipData.Item.

Per ulteriori informazioni, leggi il Copia e Incolla. Nelle demo dell'API puoi anche vedere una semplice implementazione del copia e incolla e un'implementazione più completa nell'esempio di Appunti.

Trascina

Le nuove API semplificano le operazioni di trascinamento nell'interfaccia utente della tua applicazione. Una trascinamento è il trasferimento di qualche tipo di dati, effettuato in un ClipData da un luogo all'altro. Il punto di inizio e di fine dell'operazione di trascinamento è View, quindi le API che gestiscono direttamente le operazioni di trascinamento vengono del corso View.

Un'operazione di trascinamento ha un ciclo di vita definito da diverse azioni di trascinamento, ciascuna definito da un oggetto DragEvent, come ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED e ACTION_DROP. Ogni visualizzazione che desidera partecipare a un trascinamento di Cloud Shell possono rimanere in ascolto di queste azioni.

Per iniziare a trascinare i contenuti della tua attività, chiama startDrag() su un View, fornendo un oggetto ClipData che rappresenta i dati da trascinare, un View.DragShadowBuilder per facilitare l'"ombra" che gli utenti vedono sotto le dita durante il trascinamento e un Object che può condividere informazioni sull'oggetto trascinato con le viste che potrebbero riceverlo.

Per accettare un oggetto trascinato in un View (ricevi il "goccia"), registra la vista con OnDragListener chiamando setOnDragListener(). Quando si verifica un evento di trascinamento sulla vista, il sistema chiama onDrag() per il OnDragListener, che riceve un DragEvent che descrive il tipo di azione di trascinamento (ad esempio ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED e ACTION_DROP). Durante un trascinamento, il sistema chiama ripetutamente onDrag() per la visualizzazione sotto il trascinamento, per flusso di eventi di trascinamento. La vista ricevente può richiedere il tipo di evento inviato a onDragEvent() chiamando getAction() su DragEvent.

Nota:anche se un evento di trascinamento può includere un oggetto ClipData, non è correlato agli appunti di sistema. Trascina non dovrebbe mai inserire i dati trascinati negli appunti di sistema.

Per ulteriori informazioni, leggi la sezione Trascinare Eliminazione. Puoi anche visualizzare un'implementazione del trascinamento nella API Demos e la Honeycomb Gallery un'applicazione.

Widget di app

Android 3.0 supporta diverse nuove classi di widget per widget di app più interattivi per gli utenti Schermata Home, tra cui: GridView, ListView, StackView, ViewFlipper e AdapterViewFlipper.

Cosa ancora più importante, puoi usare il nuovo RemoteViewsService per creare app widget con raccolte, che utilizzano widget come GridView, ListView e StackView supportati da dati remoti ad esempio da un fornitore di contenuti.

La classe AppWidgetProviderInfo (definita in XML con un elemento <appwidget-provider>) supporta anche due nuovi campi: autoAdvanceViewId e previewImage. Il campo autoAdvanceViewId ti consente di specificare l'ID vista del sottovista del widget dell'app che dovrebbe essere avanzata automaticamente dall'host del widget dell'app. La Il campo previewImage specifica un'anteprima di ciò che il widget dell'app appare e viene mostrato all'utente dal selettore di widget. Se questo campo non è fornita, l'icona del widget dell'app viene utilizzata per l'anteprima.

Per aiutarti a creare un'immagine di anteprima per il widget della tua app (da specificare nel campo previewImage), l'emulatore Android include un chiamata "Anteprima widget". Per creare un'immagine di anteprima, avvia questa applicazione, seleziona l'icona widget dell'app per la tua applicazione e impostarne l'aspetto desiderato per l'immagine di anteprima, quindi salva e inserirlo nelle risorse disegnabili dell'applicazione.

Puoi visualizzare un'implementazione delle nuove funzionalità del widget dell'app nel widget dell'app StackView e nel widget Elenco meteo. diverse applicazioni.

Notifiche nella barra di stato

Le API di Notification sono state estese per supportare uno stato più ricco di contenuti barra delle notifiche, oltre a una nuova classe Notification.Builder ti consente di per creare Notification oggetti.

Le nuove funzioni includono:

  • Supporto di un'icona di grandi dimensioni nella notifica, con setLargeIcon(). Di solito applicazioni social per mostrare la foto di contatto della persona che ha dato origine al o le app multimediali per mostrare la miniatura di un album.
  • Supporto per i layout personalizzati nel riquadro di aggiornamento della barra di stato, utilizzando setTicker().
  • Supporto per layout di notifica personalizzati che includono pulsanti con PendingIntent, per widget di notifica più interattivi. Ad esempio, un notifica può controllare la riproduzione della musica senza avviare un'attività.

Caricatori di contenuti

Le nuove API del framework facilitano il caricamento asincrono dei dati utilizzando la classe Loader. Puoi utilizzarla in combinazione con i componenti dell'interfaccia utente come viste e per caricare dinamicamente i dati dai thread worker. La sottoclasse CursorLoader è progettata appositamente per aiutarti a farlo per i dati supportati da un ContentProvider.

Devi solo implementare l'interfaccia LoaderCallbacks per ricevere i callback quando viene richiesto un nuovo caricatore o quando i dati vengono modificata, quindi richiama initLoader() per inizializzare per l'attività o il frammento.

Per saperne di più, leggi la documentazione relativa ai caricatori. Puoi anche vedere di codice di esempio utilizzando i caricatori nel LoaderCursor e Esempi di LoaderThrottle.

Bluetooth A2DP e API per cuffie

Android ora include API per consentire alle applicazioni di verificare lo stato della connessione Bluetooth A2DP e dispositivi con profili delle cuffie. Ad esempio, le applicazioni possono rilevare la presenza di auricolari Bluetooth connessi per ascoltare la musica e avvisare l'utente quando opportuno. Le applicazioni possono inoltre ricevere per i comandi AT specifici del fornitore e notificare all'utente lo stato della connessione dispositivo, ad esempio quando il livello della batteria del dispositivo connesso è basso.

Puoi inizializzare il rispettivo BluetoothProfile chiamando getProfileProxy() con il A2DP o HEADSET costante del profilo e un BluetoothProfile.ServiceListener per ricevere viene richiamato quando il client Bluetooth è connesso o disconnesso.

Framework animazione

Un nuovissimo framework di animazione flessibile ti consente di animare le proprietà arbitrarie di qualsiasi oggetto (Visualizzazione, Drawable, Frammento, Oggetto o qualsiasi altra cosa). Consente di definire vari aspetti di una un'animazione, ad esempio:

  • Durata
  • Quantità e comportamento ripetuti
  • Tipo di interpolazione temporale
  • Set di animazioni per riprodurre le animazioni insieme, in sequenza o dopo determinati ritardi
  • Ritardo aggiornamento frame

Puoi definire questi aspetti dell'animazione, e altri, per i valori int, float ed esadecimale di un oggetto i valori dei colori, per impostazione predefinita. Vale a dire che, quando un oggetto ha un campo proprietà per uno di questi tipi, può cambiare il proprio valore nel tempo per influenzare un'animazione. Per animare qualsiasi altro tipo di valore, devi al sistema come calcolare i valori per quel determinato tipo mediante l'implementazione dell'interfaccia TypeEvaluator.

Esistono due animatori che puoi utilizzare per animare i valori di una proprietà: ValueAnimator e ObjectAnimator. L'elemento ValueAnimator calcola i valori dell'animazione, ma non conosce i valori specifici o una proprietà che viene animata come risultato. Esegue semplicemente i calcoli e tu devi rimanere in ascolto degli aggiornamenti ed elaborare i dati con la tua logica. ObjectAnimator è una sottoclasse di ValueAnimator e consente di impostare l'animazione dell'oggetto e della proprietà e gestisce tutto il lavoro dell'animazione. In altre parole, devi dare a ObjectAnimator l'oggetto da animare, dell'oggetto per cambiare nel tempo e un insieme di valori da applicare alla proprietà all'ora desiderata, quindi avvia l'animazione.

Inoltre, la classe LayoutTransition consente la transizione automatica per le modifiche apportate al layout delle attività. Per abilitare le transizioni per parte dei layout, crea un oggetto LayoutTransition e impostalo qualsiasi ViewGroup chiamando il numero setLayoutTransition(). Questo fa sì che i valori predefiniti animazioni da eseguire ogni volta che vengono aggiunti o rimossi elementi dal gruppo. Per specificare valori personalizzati animazioni, richiama setAnimator() su LayoutTransition e fornisci un Animator personalizzato, come ValueAnimator o ObjectAnimator di cui abbiamo parlato sopra.

Per ulteriori informazioni, consulta la documentazione relativa all'animazione della proprietà. Puoi puoi esaminare diversi esempi di utilizzo delle API di animazione nella dell'applicazione Demo.

Framework UI esteso

  • Selezione a scelta multipla per ListView e GridView

    La nuova modalità CHOICE_MODE_MULTIPLE_MODAL per setChoiceMode() consente agli utenti di selezionare più elementi da un ListView o GridView. Se utilizzato in insieme alla barra delle azioni, gli utenti possono selezionare più elementi e poi selezionare l'azione da il rendimento da un elenco di opzioni nella barra delle azioni (che è diventata una scelta multipla Modalità Azione).

    Per attivare la selezione a scelta multipla, chiama il numero setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) e registra un MultiChoiceModeListener con setMultiChoiceModeListener().

    Quando l'utente preme a lungo su un elemento, la barra delle azioni passa alla modalità a scelta multipla Modalità Azione. Il sistema invia una notifica al MultiChoiceModeListener quando vengono selezionati gli elementi chiamando il numero onItemCheckedStateChanged().

    Per un esempio di selezione a scelta multipla, vedere l'Elenco15. Java nell'applicazione di esempio di API Demos.

  • Nuove API per trasformare le viste

    Le nuove API consentono di applicare facilmente trasformazioni 2D e 3D alle viste della tua attività layout. Le nuove trasformazioni sono rese possibili da un insieme di proprietà degli oggetti che definiscono posizione del layout, orientamento, trasparenza e altro ancora.

    I nuovi metodi per impostare le proprietà di visualizzazione includono: setAlpha(), setBottom(), setLeft(), setRight(), setBottom(), setPivotX(), setPivotY(), setRotationX(), setRotationY(), setScaleX(), setScaleY(), setAlpha() e altri.

    Alcuni metodi hanno anche un attributo XML corrispondente che puoi specificare nel layout per applicare una trasformazione predefinita. Gli attributi disponibili includono: translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotY e alpha.

    L'utilizzo di alcune di queste nuove proprietà di vista in combinazione con il nuovo framework dell'animazione (discusso sopra), puoi applicare facilmente delle animazioni creative alle tue visualizzazioni. Ad esempio, per ruotare vista sul suo asse y, fornisci a ObjectAnimator il valore View, ovvero la e i valori iniziale e finale:

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }
    

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
    
  • Nuovi temi olografici

    I widget di sistema standard e l'aspetto generale sono stati riprogettati e includono una nuova "olografico" tema dell'interfaccia utente. Il sistema applica il nuovo tema utilizzando il sistema standard di stile e tema.

    Qualsiasi applicazione che ha come target la piattaforma Android 3.0 impostando il android:minSdkVersion o android:targetSdkVersion su "11": eredita il tema olografico per impostazione predefinita. Tuttavia, se l'applicazione applica anche un proprio tema, quest'ultimo sostituirà il tema olografico, a meno che non aggiorni gli stili per ereditare il tema olografico.

    Per applicare il tema olografico a singole attività o per ereditarle nel tuo tema puoi usare una delle diverse nuove definizioni di Theme.Holo temi. Se la tua applicazione è compatibile con una versione di Android precedente alla 3.0 e si applica temi personalizzati, devi selezionare un tema in base alla piattaforma dell'audiodescrizione.

  • Nuovi widget
      .
    • AdapterViewAnimator

      Classe di base per un AdapterView che esegue animazioni durante il passaggio tra le sue viste.

    • AdapterViewFlipper

      ViewAnimator semplice che si anima tra due o più visualizzazioni con vi sono state aggiunte. Viene mostrato un solo bambino alla volta. Se richiesto, può girare tra ogni bambino a intervalli regolari.

    • CalendarView

      Consente agli utenti di selezionare le date da un calendario toccando la data e può scorrere o far scorrere calendario alla data che preferisci. Puoi configurare l'intervallo di date disponibili nel widget.

    • ListPopupWindow

      Si ancora a una vista host e mostra un elenco di opzioni, come ad esempio un elenco di suggerimenti durante la digitazione in una visualizzazione EditText.

    • NumberPicker

      Consente all'utente di selezionare un numero da un intervallo predefinito. Il widget presenta un input campo e pulsanti su e giù per selezionare un numero. Toccando il campo di immissione l'utente può scorri i valori o toccalo di nuovo per modificare direttamente il valore corrente. Ti permette anche di mappare le posizioni alle stringhe, in modo che la stringa corrispondente venga visualizzata al posto dell'indice posizione.

    • PopupMenu

      Mostra un elemento Menu in una finestra popup modale ancorata a una vista. La appare sotto la vista ancorata, se c'è spazio, o sopra se c'è spazio. Se l'IME (soft tastiera) è visibile, il popup non si sovrappone all'IME finché l'utente non tocca o dal menu Fogli Google.

    • SearchView

      Fornisce una casella di ricerca che puoi configurare per inviare query di ricerca a un determinato l'attività e visualizzare suggerimenti di ricerca (come nella finestra di dialogo di ricerca tradizionale). Questo è particolarmente utile per offrire un widget di ricerca nella barra delle azioni. Per ulteriori informazioni, consulta la sezione Creazione di un'interfaccia di ricerca.

    • StackView

      Una vista che mostra i relativi elementi secondari in una pila 3D e consente agli utenti di scorrere visualizzazioni come un rolodex.

Grafica

  • Grafica 2D con accelerazione hardware

    Ora puoi attivare il renderer OpenGL per la tua applicazione impostando android:hardwareAccelerated="true" nel campo <application> dell'elemento manifest o per un singolo elemento <activity> elementi.

    Questo flag consente alle applicazioni di disegnare più velocemente. Il risultato è un'animazione più fluida, uno scorrimento più fluido, nonché prestazioni e risposta complessivamente migliori all'interazione dell'utente.

  • Visualizza l'assistenza per i livelli hardware e software

    Per impostazione predefinita, per View non è specificato alcun livello. Puoi specificare che deve essere supportata da un livello hardware o software, specificato dai valori LAYER_TYPE_HARDWARE e LAYER_TYPE_SOFTWARE, utilizzando setLayerType() o layerType .

    Un livello hardware è supportato da una texture specifica per l'hardware (generalmente oggetti buffer di frame o FBO su hardware OpenGL) e determina il rendering della visualizzazione utilizzando il rendering hardware di Android ma solo se l'accelerazione hardware è attivata per la gerarchia delle visualizzazioni. Quando l'hardware è disattivata, i livelli hardware si comportano esattamente come i livelli software.

    Un livello software è supportato da una bitmap e determina il rendering della visualizzazione utilizzando di rendering software, anche se è abilitata l'accelerazione hardware. I livelli software devono essere evitata quando la struttura della vista interessata si aggiorna spesso. Per ogni aggiornamento è necessario eseguire nuovamente il rendering livello software, che può essere potenzialmente lento.

    Per saperne di più, consulta la documentazione di LAYER_TYPE_HARDWARE e LAYER_TYPE_SOFTWARE.

  • Motore grafico 3D di Renderscript

    Renderscript è un framework 3D di runtime che fornisce sia un'API per la creazione di scene 3D che uno speciale linguaggio indipendente dalla piattaforma per ottenere le massime prestazioni. Con Renderscript, può accelerare le operazioni grafiche e l'elaborazione dei dati. Renderscript è un modo ideale per creare effetti 3D ad alte prestazioni per applicazioni, sfondi, caroselli e altro ancora.

    Per ulteriori informazioni, consulta la sezione Rendering e calcolo 3D con Renderscript.

Contenuti multimediali

  • Video in time-lapse

    Le API Camcorder supportano ora la possibilità di registrare video in time-lapse. setCaptureRate() imposta la frequenza con cui i frame in cui eseguire l'acquisizione.

  • Supporto della texture per gli stream di immagini

    Il nuovo SurfaceTexture ti consente di acquisire uno stream di immagini come OpenGL ES texture. Chiamando il numero setPreviewTexture() per Camera, puoi specificare il SurfaceTexture su cui tracciare i fotogrammi per la riproduzione o l'anteprima del video fotocamera.

  • Live streaming HTTP

    Le applicazioni possono ora passare l'URL di una playlist M3U al framework multimediale per avviare un evento HTTP Live una sessione di streaming. Il framework multimediale supporta la maggior parte delle specifiche HTTP Live streaming, inclusa la velocità in bit adattiva. Consulta il documento sui formati multimediali supportati per ulteriori informazioni.

  • Dati EXIF

    Il ExifInterface include nuovi campi per apertura delle foto, ISO ed esposizione nel tempo.

  • Profili videocamera

    Nuovo metodo hasProfile() e diversi video profili qualità (come QUALITY_1080P, QUALITY_720P, QUALITY_CIF e altri) ti consentono di determinare le opzioni di qualità.

  • Trasferimento di file multimediali digitali

    La piattaforma include il supporto integrato per Media/Picture Transfer Protocol (MTP/PTP) tramite USB, che consente agli utenti di trasferire facilmente qualsiasi tipo di file multimediali tra dispositivi e a un computer host. Gli sviluppatori possono basarsi su questo supporto per creare applicazioni che consentono agli utenti di creare i file multimediali che potrebbero voler trasferire o condividere su più dispositivi.

  • Gestione dei diritti digitali (DRM)

    Nuovo framework DRM (Extensible Digital Rights Management) per verificare e applicare le misure digitali i tuoi diritti. È implementato in due livelli architetturali:

    • Un'API del framework DRM, che è esposta alle applicazioni ed esegue la VM Dalvik per per applicazioni standard.
    • Un gestore DRM di codice nativo che implementa l'API del framework ed espone un'interfaccia per DRM plug-in per gestire la gestione dei diritti e la decrittografia per vari schemi DRM.

    Per gli sviluppatori di applicazioni, il framework offre un'API astratta e unificata che semplifica la gestione dei contenuti protetti. L'API nasconde la complessità delle operazioni DRM e consente coerente per contenuti protetti e non protetti e su una vasta gamma di DRM schemi di machine learning.

    Per i produttori di dispositivi, i proprietari dei contenuti e i provider di media digitali online, il DRM l'API plugin del framework fornisce un mezzo per aggiungere supporto per uno schema DRM scelto nel Sistema Android, per un'applicazione sicura della protezione dei contenuti.

    La versione di anteprima non fornisce plug-in DRM nativi per il controllo e l'applicazione delle i tuoi diritti. Tuttavia, i produttori possono includere plug-in DRM con i loro dispositivi.

    Puoi trovare tutte le API DRM nel pacchetto android.drm.

Supporto della tastiera

  • Supporto per i tasti di modifica Ctrl, Meta, Bloc Maiusc, Bloc num e Bloc scorr. Per ulteriori informazioni, consulta META_CTRL_ON e i campi correlati.
  • Supporto per tastiere in stile desktop, compreso il supporto per tasti come Esc, Home, End Elimina e altri. Puoi determinare se gli eventi chiave provengono da una tastiera completa query su getKeyboardType() e controllo di KeyCharacterMap.FULL
  • TextView ora supporta le funzionalità di taglio, copia incolla e seleziona tutto utilizzando le combinazioni di tasti Ctrl+X, Ctrl+C, Ctrl+V e Ctrl+A. Supporta anche Pagina su/Pagina giù, Inizio/Fine e la selezione del testo tramite tastiera.
  • KeyEvent aggiunge diversi nuovi metodi per semplificare il controllo della chiave in modo corretto e coerente. Vedi hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers().
  • Le applicazioni possono implementare scorciatoie da tastiera personalizzate creando sottoclassi Activity, Dialog o View e implementando onKeyShortcut(). Il framework chiama questo metodo ogni volta che una chiave viene combinata con il tasto Ctrl. Durante la creazione di un menu Opzioni, puoi registrare la tastiera le scorciatoie da tastiera impostando l'attributo android:alphabeticShortcut o android:numericShortcut per ogni <item> (o con setShortcut()).
  • Android 3.0 include una nuova "tastiera virtuale" dispositivo con ID KeyCharacterMap.VIRTUAL_KEYBOARD. Lo strumento virtuale La tastiera ha una mappa dei tasti USA in stile desktop che è utile per sintetizzare gli eventi chiave ai fini del test. di testo.

Eventi touch divisi

In precedenza, solo una singola visualizzazione poteva accettare eventi tocco alla volta. Android 3.0 aggiunge il supporto per la suddivisione degli eventi touch tra viste e persino finestre, in modo che visualizzazioni diverse possano accettare eventi touch simultanei.

Gli eventi di Split-touch sono attivati per impostazione predefinita quando un'applicazione sceglie come target Android 3.0. Vale a dire, quando l'applicazione ha impostato android:minSdkVersion o android:targetSdkVersion su "11".

Tuttavia, le seguenti proprietà ti consentono di disattivare gli eventi di tocco diviso nelle viste all'interno gruppi di viste specifici e tra finestre.

  • Attributo android:splitMotionEvents per i gruppi di visualizzazioni consente di disattivare gli eventi split touch che si verificano tra le visualizzazioni secondarie di un layout. Ad esempio:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

    In questo modo, le visualizzazioni secondarie nel layout lineare non possono suddividere gli eventi di tocco: può essere una sola visualizzazione ricevere eventi touch alla volta.

  • La proprietà dello stile android:windowEnableSplitTouch ti consente di disattivare gli eventi split touch tra le finestre, applicandoli a un tema per l'attività o l'intera applicazione. Ad esempio:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>
    

    Quando questo tema viene applicato a una <activity> o a un <application>, vengono accettati solo gli eventi tocco all'interno della finestra dell'attività corrente. Ad esempio, disattivando la suddivisione eventi touch su tutte le finestre, la barra di sistema non può ricevere eventi touch contemporaneamente a attività. Questa operazione non influisce sulla possibilità o meno delle visualizzazioni all'interno dell'attività di dividere il tocco eventi: per impostazione predefinita, l'attività può comunque suddividere gli eventi touch tra le visualizzazioni.

    Per ulteriori informazioni sulla creazione di un tema, leggi l'articolo Applicare stili e temi.

WebKit

  • Nuova classe WebViewFragment per creare un frammento composto da WebView.
  • Nuovi metodi WebSettings:
    • setDisplayZoomControls() ti permette di nascondere i controlli di zoom sullo schermo consentendo comunque all'utente di eseguire lo zoom con gesti delle dita (devi impostare setBuiltInZoomControls() true).
    • Il nuovo metodo WebSettings, setEnableSmoothTransition(), ti consente per consentire transizioni fluide durante la panoramica e lo zoom. Se questa opzione è abilitata, WebView sceglierà una soluzione per massimizzare il rendimento (ad esempio, i contenuti del componente WebView potrebbero non aggiornarsi durante transizione).
  • Nuovi metodi WebView:
    • Callback onPause(), per mettere in pausa l'elaborazione associata al componente WebView quando viene nascosto. Ciò è utile per ridurre la CPU o traffico di rete quando WebView non è in primo piano.
    • Callback onResume(), per riprendere l'elaborazione associata a WebView, che è stata messa in pausa durante il giorno onPause().
    • saveWebArchive() ti consente di salvare la visualizzazione corrente come archivio web sul dispositivo.
    • showFindDialog() avvia una ricerca testuale in la vista corrente.

Browser

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

  • Acquisizione di contenuti multimediali

    Come definito da HTML Media Capture , il Browser consente alle applicazioni web di accedere all'acquisizione di audio, immagini e video funzionalità del dispositivo. Ad esempio, il seguente codice HTML fornisce un input per l'utente scatta una foto da caricare:

    <input type="file" accept="image/*;capture=camera" />
    

    In alternativa, escludendo il parametro capture=camera, l'utente può scegliere di acquisire un nuova immagine con la fotocamera o selezionane una dal dispositivo (ad esempio dall'applicazione Galleria).

  • Orientamento del dispositivo

    Come definito dall'evento di orientamento del dispositivo. specifica, il browser consente alle applicazioni web di ascoltare eventi DOM che forniscono informazioni sull'orientamento fisico e sul movimento del dispositivo.

    L'orientamento del dispositivo è espresso in gradi con gli assi x, y e z, mentre il movimento è espressa con i dati di accelerazione e velocità di rotazione. Una pagina web può registrarsi per l'orientamento eventi chiamando window.addEventListener con il tipo di evento "deviceorientation" e registra gli eventi di movimento registrando il tipo di evento "devicemotion".

  • Trasformazioni CSS 3D

    Come definito dalla funzione CSS 3D Transform del modulo, il browser consente di trasformare gli elementi sottoposti a rendering da CSS dimensioni.

Utilità JSON

I nuovi corsi, JsonReader e JsonWriter, ti aiutano legge e scrive flussi JSON. Le nuove API integrano le classi org.json, che manipolano un documento in memoria.

Puoi creare un'istanza di JsonReader chiamando del suo metodo costruttore e passare il valore InputStreamReader che alimenta la stringa JSON. Quindi inizia a leggere un oggetto chiamando beginObject(), leggi un nome della chiave con nextName(), leggi il valore utilizzando i metodi specifico per il tipo, come nextString() e nextInt(), e continua a farlo finché il valore hasNext() è true.

Puoi creare un'istanza di JsonWriter chiamando il relativo costruttore passando il OutputStreamWriter appropriato. Poi scrivi i dati JSON in un modo simile al lettore, utilizzando name() per aggiungere il nome di una proprietà e un metodo value() appropriato per aggiungere il rispettivo valore.

Per impostazione predefinita, queste classi sono rigide. setLenient() in ogni classe le configura per essere più liberali in ciò che accettano. Questo livello inderogabile la modalità di analisi è compatibile anche con il parser predefinito di org.json.

Costanti delle nuove caratteristiche

La <uses-feature> l'elemento manfest deve essere utilizzato per informare entità esterne (come Google Play) dell'insieme le funzionalità hardware e software da cui dipende l'applicazione. In questa release, Android aggiunge le seguenti nuove costanti che le applicazioni possono dichiarare con questo elemento:

  • "android.hardware.faketouch"

    Se dichiarato, indica che l'applicazione è compatibile con un dispositivo che offre un touchscreen emulato (o migliore). Un dispositivo che offre un touchscreen emulato fornisce un input dell'utente in grado di emulare un sottoinsieme di touchscreen le funzionalità di machine learning. Un esempio di tale sistema di input è un mouse o un telecomando che attiva una il cursore sullo schermo. Questi sistemi di input supportano eventi touch di base come clic verso il basso, clic su e trascinamento. Tuttavia, i tipi di input più complicati (come gesti, scorrimenti e così via) potrebbero essere più difficili o impossibile sui dispositivi falsi (e i gesti multi-touch non sono sicuramente possibili).

    Se la tua applicazione non richiede gesti complicati e te ne non vuoi che la tua applicazione venga filtrata dai dispositivi con un touchscreen emulato, deve dichiarare "android.hardware.faketouch" con un <uses-feature> . In questo modo, la tua applicazione sarà disponibile per il maggior numero di tipi di dispositivi, incluse quelle che forniscono solo un input emulato del touchscreen.

    Tutti i dispositivi con touchscreen supportano anche "android.hardware.faketouch", perché le funzionalità touchscreen sono un soprainsieme di funzionalità di fingertouch. Pertanto, a meno che tu non abbia bisogno un touchscreen, devi aggiungere una <uses-feature> per il falsotouch.

Nuove autorizzazioni

  • "android.permission.BIND_REMOTEVIEWS"

    Deve essere dichiarata come autorizzazione obbligatoria nel file manifest di <service>. per un'implementazione di RemoteViewsService. Ad esempio, quando creando un widget app che usi RemoteViewsService per compilare un visualizzazione raccolta, la voce del file manifest potrebbe avere il seguente aspetto:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />
    

Nuove tecnologie della piattaforma

  • Spazio di archiviazione
      .
    • Supporto del file system ext4 per abilitare l'archiviazione eMMC integrata.
    • FUSE per supportare i dispositivi MTP.
    • Supporto della modalità host USB per supportare tastiere e hub USB.
    • Supporto per MTP/PTP
  • Kenel Linux
      .
    • Upgrade eseguito alla versione 2.6.36
  • VM Dalvik
      .
    • Nuovo codice da supportare e ottimizzare per SMP
    • Diversi miglioramenti all'infrastruttura JIT
    • Miglioramenti apportati a garbage collection:
      • Ottimizzato per SMP
      • Supporto per heap di dimensioni maggiori
      • Gestione unificata per bitmap e buffer di byte
  • Librerie Dalvik Core
      .
    • Nuova implementazione molto più rapida di NIO (libreria I/O moderna)
    • Messaggi di eccezione migliorati
    • Correzioni di correzioni e prestazioni nel corso del tempo

Report sulle differenze API

Per una visualizzazione dettagliata di tutte le modifiche alle API in Android 3.0 (livello API 11), consulta il report Differenze nelle API.

Livello API

La piattaforma Android 3.0 offre una versione aggiornata di l'API del framework. API per Android 3.0 viene assegnato un identificatore intero, 11, ossia archiviati nel sistema stesso. Questo identificatore, chiamato "livello API", consente sistema per determinare correttamente se un'applicazione è compatibile al sistema prima di installare l'applicazione.

Per utilizzare le API introdotte in Android 3.0 nella tua applicazione: devi compilare l'applicazione sulla base della libreria Android fornita in la piattaforma SDK Android 3.0. In base alle tue esigenze, puoi devi aggiungere anche un android:minSdkVersion="11" all'elemento <uses-sdk> nel codice del file manifest. Se la tua applicazione è progettata per essere eseguita solo su Android 2.3 e versioni successive, la dichiarazione dell'attributo impedisce l'installazione dell'applicazione in precedenza più versioni della piattaforma.

Per saperne di più, consulta la pagina Che cos'è l'API Livello?