Livello API: 11
Per gli sviluppatori, la piattaforma Android 3.0
(HONEYCOMB
) è disponibile come componente 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 come componente scaricabile per l'SDK Android. La piattaforma scaricabile include una libreria e un'immagine di sistema Android, nonché una serie di skin per emulatori e altro ancora. Per iniziare a sviluppare o testare su Android 3.0, utilizza Android SDK Manager per scaricare la piattaforma nel tuo SDK.
Panoramica dell'API
Le sezioni seguenti forniscono una panoramica tecnica delle novità per gli sviluppatori in Android 3.0, incluse le nuove funzionalità e le modifiche all'API del framework rispetto alla versione precedente.
Frammenti
Un frammento è un nuovo componente del framework che consente di separare elementi distinti di un'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 un'interfaccia utente e utilizzarlo come worker per l'attività, ad esempio per gestire l'avanzamento di un download che si verifica solo durante l'esecuzione dell'attività.
Inoltre:
- I frammenti sono autonomi e possono essere riutilizzati in più attività
- Puoi aggiungere, rimuovere, sostituire e animare i frammenti all'interno dell'attività
- Puoi aggiungere frammenti a una pila di ritorno gestita dall'attività, preservando lo stato dei frammenti man mano che vengono modificati e consentendo all'utente di tornare indietro tra i diversi 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 della 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, ad esempio aggiungere o rimuovere un frammento, devi creare un FragmentTransaction
. Puoi quindi chiamare metodi come add()
remove()
o replace()
. Dopo aver applicato 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 esempi sono disponibili anche nell'applicazione 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 del menu Opzioni. Inoltre, la barra di azioni ti consente di:
- Aggiungi 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'attributoandroid:actionViewClass
con il nome della classe di widget. Devi anche dichiarare l'attributoandroid: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 callbackonOptionsItemSelected()
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 chiamasetDisplayUseLogoEnabled(true)
nella tua attività. - Aggiungi i breadcrumb per navigare all'indietro nella pila di frammenti precedenti
- 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 esempi sono disponibili anche nell'applicazione API Demos.
Appunti di sistema
Ora le applicazioni possono copiare e incollare dati (oltre al semplice testo) nella e dalla clipboard di sistema. 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. Un'operazione di trascinamento è il trasferimento di un tipo di dati, trasportati in un oggetto ClipData
, da un luogo all'altro. Il punto di inizio e di fine dell'operazione di trascinamento è un View
, pertanto le API che gestiscono direttamente le operazioni di trascinamento si trovano nella classe View
.
Un'operazione di trascinamento ha un ciclo di vita definito da diverse azioni di trascinamento, ciascuna definita da un oggetto DragEvent
, ad esempio ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
e ACTION_DROP
. Ogni visualizzazione che vuole partecipare a un'operazione di trascinamento può ascoltare queste azioni.
Per iniziare a trascinare i contenuti nella tua attività, chiama startDrag()
su un View
, fornendo un oggetto ClipData
che rappresenti
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 di trascinamento con le visualizzazioni che potrebbero riceverlo.
Per accettare un oggetto trascinato in un View
(ricevi il "goccia"), registra la vista
con OnDragListener
chiamando setOnDragListener()
. Quando nella visualizzazione si verifica un evento di trascinamento, il sistema chiama onDrag()
per OnDragListener
, che riceve un DragEvent
che descrive il tipo di azione di trascinamento che si è verificata (ad esempio ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
e ACTION_DROP
). Durante un trascinamento, il sistema chiama ripetutamente onDrag()
per la visualizzazione sottostante al trascinamento, per inviare uno stream 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ò contenere un oggetto ClipData
, questo non è correlato alla clipboard 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 delle app più interattivi nella schermata Home degli utenti, 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
consente di specificare l'ID visualizzazione della visualizzazione secondaria del widget dell'app che deve 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 viene fornito, per l'anteprima viene utilizzata l'icona del widget dell'app.
Per aiutarti a creare un'immagine di anteprima per il widget dell'app (da specificare nel campo previewImage
), l'emulatore Android include un'applicazione 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 della barra di stato
Le API Notification
sono state estese per supportare notifiche della barra di stato più ricche di contenuti. Inoltre, una nuova classe Notification.Builder
consente di creare facilmente oggetti Notification
.
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 ticker della barra di stato, utilizzando
setTicker()
. - Supporto per i layout delle notifiche personalizzate che includono pulsanti con
PendingIntent
, per widget di notifica più interattivi. Ad esempio, una notifica può controllare la riproduzione di 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 i dati sono stati modificati, quindi chiamare initLoader()
per inizializzare il caricatore per la tua attività o il tuo frammento.
Per saperne di più, leggi la documentazione relativa ai caricatori. Puoi anche vedere il codice di esempio che utilizza i caricatori negli esempi LoaderCursor e LoaderThrottle.
Bluetooth A2DP e API per cuffie
Android ora include API per consentire alle applicazioni di verificare lo stato dei dispositivi con profilo A2DP e per cuffie Bluetooth connessi. 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 la costante del profilo A2DP
o HEADSET
e un BluetoothProfile.ServiceListener
per ricevere callback quando il client Bluetooth è connesso o disconnesso.
Framework animazione
Un nuovissimo framework di animazione flessibile consente di animare proprietà arbitrarie di qualsiasi oggetto (Visualizzazione, Disegnabile, Frammento, Oggetto o qualsiasi altra cosa). Consente di definire vari aspetti di una un'animazione, ad esempio:
- Durata
- Importo e comportamento di ripetizione
- Tipo di interpolazione temporale
- Set di animazioni per riprodurre le animazioni insieme, in sequenza o dopo determinati ritardi
- Ritardo nell'aggiornamento dei 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
. ValueAnimator
calcola i valori di animazione, ma non è a conoscenza dell'oggetto o della proprietà specifici che vengono animati di conseguenza. 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'oggetto e la proprietà da animare e gestisce tutto il lavoro di 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 animazioni personalizzate, chiama setAnimator()
sul LayoutTransition
e fornisci un Animator
personalizzato, come ValueAnimator
o ObjectAnimator
discussi sopra.
Per ulteriori informazioni, consulta la documentazione sull'animazione della proprietà. Puoi puoi vedere anche diversi esempi di utilizzo delle API di animazione nella dell'applicazione Demo.
Framework dell'interfaccia utente esteso
- Selezione a scelta multipla per ListView e GridView
La nuova modalità
CHOICE_MODE_MULTIPLE_MODAL
persetChoiceMode()
consente agli utenti di selezionare più elementi da unListView
o unGridView
. 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 unMultiChoiceModeListener
consetMultiChoiceModeListener()
.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 numeroonItemCheckedStateChanged()
.Per un esempio di selezione a scelta multipla, consulta la classe List15. java nell'applicazione di esempio 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. Nuove trasformazioni sono rese possibili da un insieme di proprietà degli oggetti che definiscono la posizione, l'orientamento, la trasparenza e altro ancora del layout della visualizzazione.
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
ealpha
.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 una vista sull'asse Y, fornisci a
ObjectAnimator
ilView
, la proprietà "rotationY" 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
oandroid: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 ereditarlo nelle tue definizioni di temi, utilizza uno dei diversi nuovi temi
Theme.Holo
. Se la tua applicazione è compatibile con una versione di Android precedente alla 3.0 e applica temi personalizzati, devi selezionare un tema in base alla versione della piattaforma. - Nuovi widget
AdapterViewAnimator
Classe di base per un
AdapterView
che esegue animazioni durante il passaggio tra le sue viste.AdapterViewFlipper
ViewAnimator
semplice che passa in animazione da due o più visualizzazioni che sono state aggiunte. Viene mostrato un solo figlio alla volta. Se richiesto, può passare automaticamente da un figlio all'altro 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ò scorrere i valori o toccare di nuovo per modificare direttamente il valore corrente. Ti consente inoltre di mappare le posizioni alle stringhe, in modo che venga visualizzata la stringa corrispondente anziché la posizione dell'indice.
PopupMenu
Mostra un
Menu
in una finestra popup modale ancorata a una visualizzazione. Il popup viene visualizzato sotto la visualizzazione di ancoraggio se c'è spazio oppure sopra se non c'è. Se l'IME (tastiera virtuale) è visibile, il popup non si sovrappone all'IME finché l'utente non tocca il menu.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 Creare 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. Ciò si traduce in animazioni più fluide, scorrimento più agevole e un rendimento e una risposta migliori in generale 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 valoriLAYER_TYPE_HARDWARE
eLAYER_TYPE_SOFTWARE
, utilizzandosetLayerType()
olayerType
.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 di software devono essere evitati quando la struttura ad albero delle visualizzazioni interessate si aggiorna di frequente. Ogni aggiornamento richiederà il nuovo rendering del livello software, che potrebbe essere potenzialmente lento.
Per ulteriori informazioni, consulta la documentazione di
LAYER_TYPE_HARDWARE
eLAYER_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, puoi 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 saperne di più, consulta la documentazione relativa al rendering e al 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
La nuova
SurfaceTexture
consente di acquisire uno stream di immagini come texture OpenGL ES. ChiamandosetPreviewTexture()
per la tua istanzaCamera
, puoi specificare ilSurfaceTexture
su cui disegnare la riproduzione del video o i frame di anteprima della videocamera. - HTTP Live Streaming
Le applicazioni ora possono passare l'URL di una playlist M3U al framework multimediale per avviare un HTTP Live una sessione di streaming. Il framework multimediale supporta la maggior parte della specifica HTTP Live Streaming, incluso il bitrate adattivo. Per ulteriori informazioni, consulta il documento Formati multimediali supportati.
- Dati EXIF
Il
ExifInterface
include nuovi campi per apertura delle foto, ISO ed esposizione nel tempo. - Profili di videocamere
Il nuovo metodo
hasProfile()
e diversi profili di qualità video (ad esempioQUALITY_1080P
,QUALITY_720P
,QUALITY_CIF
e altri) ti consentono di determinare le opzioni di qualità della videocamera. - Trasferimento di file di contenuti multimediali digitali
La piattaforma include il supporto integrato per il protocollo MTP/PTP (Media/Picture Transfer Protocol) tramite USB, che consente agli utenti di trasferire facilmente qualsiasi tipo di file multimediali tra dispositivi e su un computer host. Gli sviluppatori possono sfruttare questo supporto creando applicazioni che consentono agli utenti di creare o gestire file multimediali avanzati che potrebbero voler trasferire o condividere tra dispositivi.
- Gestione dei diritti digitali (DRM)
Nuovo framework DRM (Digital Rights Management) estensibile per il controllo e l'applicazione dei diritti digitali. Viene implementato in due livelli di architettura:
- 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 i plug-in DRM 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 una modalità di funzionamento coerente sia per i contenuti protetti che per quelli non protetti e su una serie di schemi DRM.
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 di dispositivi potrebbero fornire 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 Control, 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 eseguendo una query su
getKeyboardType()
e controllando se è presenteKeyCharacterMap.FULL
TextView
ora supporta le operazioni di taglio, copia, incolla e selezione di tutti gli elementi tramite tastiera, utilizzando le combinazioni di tasti Ctrl+X, Ctrl+C, Ctrl+V e Ctrl+A. Supporta inoltre i tasti PageUp/PageDown, Home/End e la selezione del testo tramite tastiera.KeyEvent
aggiunge diversi nuovi metodi per semplificare il controllo della chiave in modo corretto e coerente. ConsultahasModifiers(int)
,hasNoModifiers()
,metaStateHasModifiers()
,metaStateHasNoModifiers()
.- Le applicazioni possono implementare scorciatoie da tastiera personalizzate sottoclassificando
Activity
,Dialog
oView
e implementandoonKeyShortcut()
. Il framework chiama questo metodo ogni volta che un tasto viene combinato con il tasto Ctrl. Durante la creazione di un menu Opzioni, puoi registrare la tastiera le scorciatoie da tastiera impostando l'attributoandroid:alphabeticShortcut
oandroid:numericShortcut
per ogni<item>
(o consetShortcut()
). - Android 3.0 include una nuova "tastiera virtuale" dispositivo con ID
KeyCharacterMap.VIRTUAL_KEYBOARD
. La tastiera virtuale ha una mappa tastiera statunitense in stile desktop, utile per sintetizzare gli eventi chiave per testare l'input.
Eventi touch divisa
In precedenza, solo una singola visualizzazione poteva accettare eventi tocco alla volta. Android 3.0 aggiunge il supporto per la suddivisione degli eventi tocco tra visualizzazioni e persino finestre, in modo che visualizzazioni diverse possano accettare eventi tocco simultanei.
Gli eventi tocco suddivisi sono abilitati per impostazione predefinita quando un'applicazione ha come target Android 3.0. In altre parole, quando l'applicazione ha impostato il valore dell'attributo 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.
- L'attributo
android:splitMotionEvents
per i gruppi di visualizzazioni consente di disattivare gli eventi tocco suddivisi che si verificano tra le visualizzazioni secondarie in 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 daWebView
. - 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 impostaresetBuiltInZoomControls()
true
).- Il nuovo metodo
WebSettings
,setEnableSmoothTransition()
, consente di attivare 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. Questa opzione è utile per ridurre il traffico di rete o della CPU non necessario quando WebView non è in primo piano. onResume()
, per riprendere l'elaborazione associata al WebView, che è stata messa in pausa duranteonPause()
.saveWebArchive()
ti consente di salvare la visualizzazione corrente come archivio web sul dispositivo.showFindDialog()
avvia una ricerca di testo nella vista corrente.
- Callback
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 consentire all'utente di scattare 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 dalla specifica Evento di orientamento del dispositivo, il browser consente alle applicazioni web di ascoltare gli 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 specifica del modulo di trasformazione 3D CSS, il browser consente di trasformare gli elementi visualizzati dal CSS in tre dimensioni.
Utilità JSON
I nuovi corsi, JsonReader
e JsonWriter
, ti aiutano
legge e scrive flussi JSON. Le nuove API completano le classi org.json
, che manipolano un documento in memoria.
Puoi creare un'istanza di JsonReader
chiamando il suo metodo di costruttore e passando il InputStreamReader
che alimenta la stringa JSON.
Quindi, inizia a leggere un oggetto chiamando beginObject()
, leggi un nome di chiave con nextName()
, leggi il valore utilizzando i metodi relativi al tipo, come nextString()
e nextInt()
, e continua a farlo finché hasNext()
è vero.
Puoi creare un'istanza di JsonWriter
chiamando il relativo costruttore e passando il OutputStreamWriter
appropriato. Quindi, scrivi i dati JSON in modo simile al lettore, utilizzando name()
per aggiungere un nome 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
L'elemento manifest <uses-feature>
deve essere utilizzato per informare entità esterne (come Google Play) dell'insieme di funzionalità hardware e software su cui dipende la tua 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 impossibili sui dispositivi con faketouch (e i gesti multitouch non sono sicuramente possibili).
Se la tua applicazione non richiede gesti complicati e non vuoi che venga filtrata dai dispositivi con un touchscreen emulato, devi dichiarare
"android.hardware.faketouch"
con un elemento<uses-feature>
. In questo modo, la tua applicazione sarà disponibile per il maggior numero di tipi di dispositivi, inclusi quelli che forniscono solo un input touchscreen simulato.Tutti i dispositivi che includono un touchscreen supportano anche
"android.hardware.faketouch"
, perché le funzionalità del touchscreen sono un superset delle funzionalità di faketouch. 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 nell'elemento manifest
<service>
per un'implementazione diRemoteViewsService
. Ad esempio, quando crei un widget dell'app che utilizzaRemoteViewsService
per compilare una visualizzazione della raccolta, la voce del 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
- Kernel Linux
- Upgrade eseguito alla versione 2.6.36
- VM Dalvik
- Nuovo codice per il supporto e l'ottimizzazione per SMP
- Diversi miglioramenti all'infrastruttura JIT
- Miglioramenti al garbage collector:
- 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 all'API in Android 3.0 (livello API 11), consulta il report Differenze API.
Livello API
La piattaforma Android 3.0 fornisce una versione aggiornata dell'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 al sistema di determinare correttamente se un'applicazione è compatibile con il sistema prima di installarla.
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. A seconda delle tue esigenze, potresti anche dover aggiungere un attributo android:minSdkVersion="11"
all'elemento <uses-sdk>
nel manifest dell'applicazione. Se la tua applicazione è progettata per funzionare solo su Android 2.3 e versioni successive,
la dichiarazione dell'attributo impedisce l'installazione dell'applicazione su versioni precedenti
della piattaforma.
Per saperne di più, consulta Che cos'è il livello API?