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, nonché una serie di skin di emulazione
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, nonché una serie di skin di emulazione altro ancora. Per iniziare a sviluppare o testare soluzioni rispetto ad Android 3.1, usa Android SDK Manager per scaricare la piattaforma nell'SDK.
Panoramica dell'API
Le sezioni che seguono forniscono una panoramica tecnica delle novità per gli sviluppatori in Android 3.1, incluse nuove funzionalità e modifiche all'API Framework da la versione precedente.
API USB
Android 3.1 introduce nuove potenti API per integrando periferiche connesse con le applicazioni in esecuzione sulla piattaforma. Le API si basano su uno stack USB (Universal Serial Bus) e sui servizi che integrate nella piattaforma, con supporto sia per host USB che per dispositivo e interazioni. Con le API, gli sviluppatori possono creare applicazioni in grado di rilevare, comunicare e gestire diversi tipi di dispositivi connessi USB.
Lo stack e le API distinguono due tipi base di hardware USB, basati su se il dispositivo Android funge da host o come hardware esterno agisce in qualità di host:
- Un dispositivo USB è un componente hardware collegato che dipende dal Dispositivo Android da utilizzare come host. Ad esempio, la maggior parte dei dispositivi di input, i mouse, I joystick sono dispositivi USB, così come molte fotocamere, hub e così via.
- Un accessorio USB è un componente hardware collegato dotato di una porta USB controller host, fornisce l'alimentazione ed è progettato per comunicare Dispositivi Android tramite USB. È possibile connettere una serie di periferiche accessori, dai controller per robotica alle apparecchiature musicali, dalle biciclette per l'allenamento e altro ancora.
Per entrambi i tipi (dispositivi USB e accessori USB), il le API USB della piattaforma supportano la funzionalità di rilevamento per intent se collegata o nonché interfacce standard, endpoint e modalità di trasferimento (controllo, collettivo e interruzione).
Le API USB sono disponibili nel pacchetto android.hardware.usb
. La
è UsbManager
, che fornisce
metodi di supporto per identificare e comunicare
dispositivi USB e accessori USB. Le applicazioni possono acquisire un'istanza
UsbManager
, quindi esegui una query sull'elenco dei
dispositivi o accessori e comunicare con questi ultimi o gestirli.
UsbManager
dichiara inoltre le azioni di intent che
annunci di sistema, per annunciare quando un dispositivo o accessorio USB è collegato o
scollegato.
Altri corsi includono:
UsbDevice
, una classe che rappresenta gli elementi esterni collegato come un dispositivo USB (con il dispositivo Android che funge da ).UsbAccessory
, che rappresenta l'hardware esterno connesso come host USB (con il dispositivo Android che funge da host USB) dispositivo).UsbInterface
eUsbEndpoint
, che forniscono accesso a un cavo USB standard interfacce ed endpoint per un dispositivo.UsbDeviceConnection
eUsbRequest
, per l'invio e la ricezione di dati e il controllo messaggi da o verso un dispositivo USB, in modo sincrono e asincrono.UsbConstants
, che fornisce costanti per dichiarando i tipi di endpoint, le classi dei dispositivi e così via.
Tieni presente che, sebbene lo stack USB sia integrato nella piattaforma, il supporto effettivo per le modalità host USB e di accessori aperti su dispositivi specifici è determinata da i relativi produttori. In particolare, la modalità host si basa controller hardware nel dispositivo Android.
Inoltre, gli sviluppatori possono richiedere filtri su Google Play, in modo che le loro applicazioni non sono 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 di seguito al manifest dell'applicazione, a seconda dei casi:
- Se l'applicazione deve essere visibile soltanto ai dispositivi che supportano USB
modalità host (connessione di dispositivi USB), dichiara questo elemento:
<uses-feature android:name="android.hardware.usb.host" android:required="true">
- Se l'applicazione deve essere visibile soltanto ai dispositivi che supportano 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 interagiscono con Accessori USB, consulta documentazione per gli sviluppatori.
Per esaminare le applicazioni di esempio che utilizzano l'API host USB, fai riferimento a Test ADB e Missile Avvio app
API MTP/PTP
Android 3.1 espone una nuova API MTP che consente alle applicazioni di interagire direttamente tramite videocamere e altri dispositivi PTP connessi. La nuova API semplifica le attività per ricevere notifiche quando i dispositivi vengono collegati e rimossi, gestire file e spazio di archiviazione su tali dispositivi e trasferire file e metadati e da questi. 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
queste classi:
MtpDevice
incapsula un dispositivo MTP che viene collegato tramite il bus host USB. Un'applicazione può creare un'istanza di un oggetto di questo tipo e utilizzare i relativi metodi per ottenere informazioni sul dispositivo archiviati al suo interno, nonché l'apertura della connessione e il trasferimento dei dati. Ecco alcuni metodi:getObjectHandles()
restituisce un elenco di handle per tutti gli oggetti sul dispositivo che corrispondono a un formato e a un padre specificati. Per ottenere informazioni su un oggetto, applicazione può passare un handle agetObjectInfo()
.importFile()
consente a un'applicazione di copiare i dati di un oggetto in un file all'interno archiviazione. Questa chiamata potrebbe bloccarsi per un periodo di tempo arbitrario, a seconda del le dimensioni dei dati e la velocità dei dispositivi, pertanto devono essere .open()
consente a un'applicazione di aprire un dispositivo MTP/PTP connesso.- Resi a
getThumbnail()
la miniatura dell'oggetto come array di byte.
MtpStorageInfo
contiene informazioni su uno spazio di archiviazione su un dispositivo MTP, corrispondente al set di dati StorageInfo descritto in sezione 5.2.2 della specifica MTP. I metodi della classe consentono a un'applicazione ottenere la stringa descrittiva di un'unità di archiviazione, lo spazio libero, la capacità massima di archiviazione l'ID spazio di archiviazione e l'identificatore del volume.MtpDeviceInfo
contiene informazioni su un dispositivo MTP corrispondente al set di dati DeviceInfo descritto nella sezione 5.1.1 dell'MTP e la specifica del prodotto. I metodi utilizzati in classe consentono alle applicazioni di recuperare produttore, modello, numero di serie e versione.MtpObjectInfo
contiene informazioni su un oggetto archiviato su un dispositivo MTP, corrispondente al set di dati ObjectInfo descritto nella sezione 5.3.1 della specifica MTP. I metodi utilizzati in classe consentono alle applicazioni di dimensioni dell'oggetto, formato dei dati, tipo di associazione, data di creazione e miniatura informazioni.MtpConstants
fornisce costanti per la dichiarazione del file MTP codici di formato, tipo di associazione e 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 visualizzazioni e finestre. Gli sviluppatori possono basarsi queste funzionalità per consentire agli utenti di interagire con le applicazioni tramite mouse, trackball, joystick, gamepad e altri dispositivi, oltre a tastiere e touchscreen.
Per gestire l'input di mouse, rotellina di scorrimento e trackball, la piattaforma supporta due nuove azioni relative agli eventi di movimento:
ACTION_SCROLL
, che descrive il puntatore posizione in cui viene eseguito un movimento di scorrimento non touch, ad esempio la rotellina del mouse, che ha avuto luogo. In MotionEvent, il valore degli assiAXIS_HSCROLL
eAXIS_VSCROLL
specifica lo scorrimento relativo movimento.ACTION_HOVER_MOVE
indica lo stato attuale del mouse quando non viene premuto nessun pulsante, nonché qualsiasi elemento intermedio punti dall'ultimo eventoHOVER_MOVE
. Passa il mouse in entrata e in uscita Le notifiche non sono ancora supportate.
Per supportare joystick e gamepad, la classe InputDevice
include queste nuove sorgenti di dispositivi di input:
SOURCE_CLASS_JOYSTICK
: la fonte dispositivo ha assi del joystick.SOURCE_CLASS_BUTTON
: la fonte dispositivo è dotato di pulsanti o tasti.SOURCE_GAMEPAD
: il dispositivo di origine ha pulsanti del gamepad comeKEYCODE_BUTTON_A
oKEYCODE_BUTTON_B
. ImplicaSOURCE_CLASS_BUTTON
SOURCE_JOYSTICK
: il dispositivo di origine ha assi del joystick. Implica SOURCE_CLASS_JOYSTICK.
Per descrivere gli eventi di movimento provenienti da queste nuove fonti e da quelli provenienti dai topi
e trackball, la piattaforma ora definisce i codici degli assi su MotionEvent
, in modo simile ai codici chiave su KeyEvent
. Nuovi codici asse per i 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
degli assi utilizzati quando il framework non sa come mappare
un determinato asse. Dispositivi specifici possono utilizzare i codici generici dell'asse per trasmettere
di movimento alle applicazioni. Per un elenco completo degli assi e delle loro
interpretazioni, consulta la documentazione della classe MotionEvent
.
La piattaforma fornisce eventi di movimento alle applicazioni in batch, quindi un singolo
può contenere una posizione corrente e diversi movimenti cosiddetti storici.
Le applicazioni devono usare getHistorySize()
per recuperare
il numero di campioni storici, quindi recupera ed elabora tutti i dati storici
campioni in ordine utilizzando getHistoricalAxisValue()
. Dopodiché, le candidature devono elaborare i dati
esempio 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
da più fonti. Quando un dispositivo fornisce più fonti,
può fornire i dati dell'asse utilizzando lo stesso asse. Ad esempio, un evento touch in arrivo
dalla sorgente touch utilizza l'asse X per i dati sulla posizione dello schermo, mentre un joystick
proveniente dalla sorgente del joystick, utilizzerà l'asse X per la posizione dello stick
. Per questo motivo, è importante che le applicazioni interpretino l'asse
in base alla fonte di origine. Durante la gestione di un movimento
le applicazioni devono usare metodi su InputDevice
per determinare gli assi supportati da un dispositivo o da una fonte. In particolare,
le applicazioni possono utilizzare getMotionRanges()
per eseguire query su tutti gli assi di un dispositivo o su tutti gli assi di un determinato
all'origine del dispositivo. In entrambi i casi, le informazioni sull'intervallo per gli assi restituite
l'oggetto InputDevice.MotionRange
specifica l'origine
di ciascun valore dell'asse.
Infine, poiché gli eventi di movimento da joystick, gamepad, mouse e
le trackball non sono eventi touch, la piattaforma aggiunge un nuovo metodo di callback per
passando a un View
come "generico" eventi di movimento.
Nello specifico, 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 del
della sorgente dell'evento. SOURCE_CLASS_POINTER
di eventi
vai a View
sotto il puntatore, in modo simile al tocco
funzionano. Tutti gli altri vanno all'elemento View
attualmente attivo.
Ad esempio, questo significa che View
deve mettere in primo piano per poter
ricevere eventi del 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 il movimento del joystick eventi, consulta GameControllerInput e GameView.
API RTP
Android 3.1 espone un'API al suo RTP (Real-time Transport Protocol) integrato , che le applicazioni possono utilizzare per gestire dati on demand o interattivi in modalità flusso. In particolare, le app che forniscono VOIP, push-to-talk, conferenze, e lo streaming audio possono utilizzare l'API per avviare sessioni e trasmettere o ricevere tramite flussi di dati su qualsiasi rete disponibile.
L'API RTP è disponibile nel pacchetto android.net.rtp
. Classi
include:
RtpStream
, la classe base degli stream che inviano e ricevono pacchetti di rete con payload multimediali su RTP.AudioStream
, una sottoclasse diRtpStream
che trasporta payload audio tramite RTP.AudioGroup
, un hub audio locale per la gestione e mixando l'altoparlante, il microfono eAudioStream
del dispositivo.AudioCodec
, che contiene una raccolta di codec che che definisci per unAudioStream
.
Per supportare le videoconferenze e utilizzi simili, un'applicazione crea un'istanza due classi come endpoint per il flusso:
AudioStream
specifica un endpoint remoto e consiste della mappatura di rete e di unAudioCodec
configurato.AudioGroup
rappresenta l'endpoint locale di uno o piùAudioStream
. I mix diAudioGroup
tutti iAudioStream
e, facoltativamente, interagisce con il dispositivo altoparlante e microfono.
L'utilizzo più semplice riguarda un unico endpoint remoto e un endpoint locale.
Per usi più complessi, consulta le limitazioni descritte per
AudioGroup
.
Per utilizzare l'API RTP, le applicazioni devono richiedere l'autorizzazione all'utente tramite
con la dichiarazione <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 app ridimensionabili
A partire da Android 3.1, gli sviluppatori possono creare i widget nella schermata Home ridimensionabile: orizzontalmente, verticalmente o su entrambi gli assi. L'utente tiene premuto un widget per mostrare i relativi punti di manipolazione di ridimensionamento, quindi trascina l'orientamento orizzontale e/o verticale punti di manipolazione per modificare le dimensioni nella griglia di layout.
Gli sviluppatori possono rendere ridimensionabile qualsiasi widget della schermata Home definendo una
Attributo resizeMode
nei metadati AppWidgetProviderInfo
del widget. Valori per l'attributo
Gli attributi resizeMode
includono "orizzontale", "verticale" e "nessuno".
Per dichiarare un widget ridimensionabile orizzontalmente e verticalmente, specifica il valore
"orizzontale|verticale".
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 nella schermata Home, consulta la sezione Widget delle app. documentazione.
Framework animazione
- Nuova classe ViewPropertyAnimator
- Un nuovo corso
ViewPropertyAnimator
fornisce un comodo consente agli sviluppatori di animare proprietà selezionate suView
oggetti. Il corso automatizza e ottimizza l'animazione delle proprietà, semplificando gestire più animazioni simultanee su un oggettoView
.L'utilizzo di
ViewPropertyAnimator
è semplice. Per animare le proprietà perView
, chiamaanimate()
per costruisci un oggettoViewPropertyAnimator
per quell'elementoView
. Utilizza la metodi suViewPropertyAnimator
per specificare quale proprietà e come animarlo. Ad esempio, per applicare una dissolvenza aView
in trasparente, chiamaalpha(0);
. L'oggettoViewPropertyAnimator
gestisce i dettagli della configurazione della classeAnimator
sottostante e dell'avvio, quindi del rendering l'animazione.
- Un nuovo corso
- Colore sfondo animazione
- Nuovi
getBackgroundColor()
esetBackgroundColor(int)
metodi consentono ottieni/imposta il colore di sfondo dietro le animazioni, per le animazioni delle finestre . Al momento lo sfondo deve essere nero con qualsiasi livello alfa desiderato.
- Nuovi
- Recupero della frazione animata da
ViewAnimator
- Un nuovo
getAnimatedFraction()
metodo consente di ottenere la frazione di animazione corrente: il tempo trascorso/interpolato frazione utilizzata nell'aggiornamento del frame più recente, da un valore diValueAnimator
.
- Un nuovo
Framework UI
- Rendering forzato di un livello
- Un nuovo metodo
buildLayer()
consente a un'applicazione forza la creazione di un livello della Vista e il rendering della Vista visualizzata immediatamente. Ad esempio, un'applicazione potrebbe usare questo metodo per eseguire il rendering di una vista nel suo prima di avviare un'animazione. Se la vista è complessa, esegui il rendering il livello prima di avviare l'animazione eviterai di saltare i frame.
- Un nuovo metodo
- Distanza fotocamera
- Le applicazioni possono utilizzare un nuovo metodo
setCameraDistance(float)
per impostare la distanza dal fotocamera a una vista. Ciò consente alle applicazioni di controllare meglio le trasformazioni 3D la vista, come le rotazioni.
- Le applicazioni possono utilizzare un nuovo metodo
- Visualizzazione del calendario da un selettore di date
- Un nuovo metodo
getCalendarView()
ti permette di ottenere unCalendarView
da unDatePicker
in esecuzione in un'istanza Compute Engine.
- Un nuovo metodo
- Ricezione di callback quando le viste vengono scollegate
- Un nuovo
View.OnAttachStateChangeListener
ti consente di ricevi quando una vista viene collegata o scollegata dalla relativa finestra. UsaaddOnAttachStateChangeListener()
per aggiungere un listener eaddOnAttachStateChangeListener()
per rimuoverlo.
- Un nuovo
- Listener di breadcrumb Fragment, nuova firma onInflate()
- Un nuovo metodo,
setOnBreadCrumbClickListener()
, fornisce un hook per le applicazioni intercettano i clic su fragment-breadcrumb e intraprendono le azioni necessarie prima di andare alla voce backstack o al frammento su cui è stato fatto clic. - Nella classe
Fragment
,onInflate(attrs, savedInstanceState)
è deprecato. Usa inveceonInflate(activity, attrs, savedInstanceState)
.
- Un nuovo metodo,
- Visualizza i risultati di ricerca in una nuova scheda
- Una chiave dei dati
EXTRA_NEW_SEARCH
per gli intentACTION_WEB_SEARCH
ti consente di aprire una ricerca in una nuova scheda del browser anziché in una esistente.
- Una chiave dei dati
- Cursore di testo disegnabile
- Ora puoi specificare un elemento disegnabile da utilizzare come cursore di testo utilizzando il nuovo
attributo risorsa
textCursorDrawable
.
- Ora puoi specificare un elemento disegnabile da utilizzare come cursore di testo utilizzando il nuovo
attributo risorsa
- Impostazione del bambino mostrato nelle viste remote
- Un nuovo metodo pratico,
setDisplayedChild(viewId, childIndex)
, è disponibile inRemoteViews
sottoclassi, per di impostare il file secondario visualizzato inViewAnimator
AdapterViewAnimator
sottoclassi comeAdapterViewFlipper
,StackView
,ViewFlipper
eViewSwitcher
.
- Un nuovo metodo pratico,
- Tasti generici per gamepad e altri dispositivi di input
KeyEvent
aggiunge una serie di codici chiave generici a i pulsanti del gamepad. Il corso aggiunge ancheisGamepadButton(int)
e diversi altri di supporto per l'uso dei codici chiave.
Grafica
- Supporti 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 dei i pixel possono contenere valori alfa non opachi (true). Nota: per alcune configurazioni (come come RGB_565), questa chiamata viene ignorata perché non supporta alpha per pixel e i relativi valori. Questo è inteso come un suggerimento di disegno, come in alcuni casi una bitmap nota all'opacità, può richiedere un caso di disegno più veloce rispetto a uno con un'immagine non opaca valori alfa per pixel.getByteCount()
ottiene le dimensioni di una bitmap in byte.getGenerationId()
consente a un'applicazione di trovare se una bitmap è stata modificata, ad esempio per la memorizzazione nella cache.sameAs(android.graphics.Bitmap)
determina se una determinata bitmap differisce da quella corrente, in termini di dimensioni, configurazione o dati dei pixel.
- Impostazione della posizione e della rotazione della videocamera
Camera
aggiunge due nuovi metodirotate()
esetLocation()
per il controllo la 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 con lo schermo del dispositivo spento.
Le applicazioni che riproducono in streaming musica, video o voce per lunghi periodi possono acquisire
blocco del Wi-Fi ad alte prestazioni per garantire prestazioni di streaming ottimali anche quando lo schermo
è disattivata. Poiché consuma più potenza, le applicazioni dovrebbero acquisire
quando è necessario un Wi-Fi ad alte prestazioni
connessione.
Per creare un blocco ad alte prestazioni, passa
WIFI_MODE_FULL_HIGH_PERF
come modalità di blocco in un chiamata acreateWifiLock()
.
- Un nuovo blocco Wi-Fi ad alte prestazioni consente alle applicazioni di mantenere
connessioni Wi-Fi ad alte prestazioni anche con lo schermo del dispositivo spento.
Le applicazioni che riproducono in streaming musica, video o voce per lunghi periodi possono acquisire
blocco del Wi-Fi ad alte prestazioni per garantire prestazioni di streaming ottimali anche quando lo schermo
è disattivata. Poiché consuma più potenza, le applicazioni dovrebbero acquisire
quando è necessario un Wi-Fi ad alte prestazioni
connessione.
- Altre statistiche sul traffico
- Ora le applicazioni possono accedere a statistiche su più tipi di utilizzo della rete
utilizzando nuovi metodi in
TrafficStats
. Le applicazioni possono utilizzare metodi per ottenere le statistiche UDP, il conteggio dei pacchetti, i byte di payload per la trasmissione/ricezione TCP e segmenti per un determinato UID.
- Ora le applicazioni possono accedere a statistiche su più tipi di utilizzo della rete
utilizzando nuovi metodi in
- Nome utente autenticazione SIP
- Ora le applicazioni possono recuperare e impostare il nome utente di autenticazione SIP per un profilo
utilizzando
i nuovi metodi
getAuthUserName()
esetAuthUserName()
.
- Ora le applicazioni possono recuperare e impostare il nome utente di autenticazione SIP per un profilo
utilizzando
i nuovi metodi
Gestione download
- Gestione dei download completati
- Ora le applicazioni possono avviare download che inviano notifiche agli utenti solo su
completamento. Per avviare questo tipo di download, le applicazioni superano
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
nel metodosetNotificationVisibility()
di dell'oggetto a richiesta. - Un nuovo metodo,
addCompletedDownload()
, consente a un'applicazione di aggiungere un file alla scarica il database, in modo che possa essere gestito dall'applicazione Download.
- Ora le applicazioni possono avviare download che inviano notifiche agli utenti solo su
completamento. Per avviare questo tipo di download, le applicazioni superano
- Mostra i download ordinati per dimensioni
- Le applicazioni possono avviare l'applicazione Download in modalità di ordinamento per dimensione per
aggiungendo il nuovo
INTENT_EXTRAS_SORT_BY_SIZE
aggiuntivo a un intentACTION_VIEW_DOWNLOADS
.
- Le applicazioni possono avviare l'applicazione Download in modalità di ordinamento per dimensione per
aggiungendo il nuovo
framework IME
- Recupero della chiave valore aggiuntiva di un metodo di inserimento
InputMethodSubtype
aggiunge metodocontainsExtraValueKey()
per verificare se una stringa ExtraValue è memorizzata per il sottotipo il metodogetExtraValueOf()
per estrarre un valore chiave specifico dall'hashmap ExtraValue.
Contenuti multimediali
- Nuovi formati audio in streaming
- Il framework multimediale aggiunge il supporto integrato per i contenuti ADTS AAC non elaborati, per audio in streaming migliorato, oltre al supporto dell'audio FLAC, per la massima qualità contenuti audio compressi (senza perdita di dati). Consulta la sezione Formati multimediali supportati per ulteriori informazioni.
Controlli di avvio disattivati applicazioni
A partire da Android 3.1, il gestore di pacchetti del sistema di applicazioni in stato arrestato che fornisce un mezzo per controllare il loro lancio da processi in background e altre applicazioni.
Tieni presente che lo stato interrotto di un'applicazione non è uguale allo stato di un'attività in stato interrotto. Il sistema gestisce questi due stati arrestati separatamente.
La piattaforma definisce due nuovi flag di intent che consentono a un mittente di specificare se consentire o meno all'intent di attivare componenti in un'applicazione.
FLAG_INCLUDE_STOPPED_PACKAGES
- Includi filtri per intent delle applicazioni arrestate nell'elenco dei potenziali target da risolvere.FLAG_EXCLUDE_STOPPED_PACKAGES
- Escludi dall'elenco dei potenziali filtri per intent delle applicazioni bloccate target.
Quando nessuno di questi flag o nessuno di questi flag viene definito in un intent, il valore predefinito il comportamento degli utenti consiste nell'includere i filtri delle applicazioni arrestate nell'elenco delle obiettivi potenziali.
Tieni presente che il sistema aggiunge FLAG_EXCLUDE_STOPPED_PACKAGES
a tutte le trasmissioni
intent. in modo da impedire le trasmissioni dai servizi in background
avviare inavvertitamente o inutilmente componenti di applicazioni interrotte.
Un servizio o un'applicazione in background può eseguire l'override di questo comportamento aggiungendo il metodo
FLAG_INCLUDE_STOPPED_PACKAGES
flag da trasmettere
intent che dovrebbero essere autorizzati ad attivare applicazioni interrotte.
Le applicazioni si trovano in stato arrestato al momento della prima installazione, ma non vengono già avviato e quando vengono interrotti manualmente dall'utente (in Gestisci applicazioni).
Notifica del primo avvio e dell'upgrade dell'applicazione
La piattaforma aggiunge notifiche migliorate in caso di primo avvio dell'applicazione e upgrade tramite due nuove azioni per intent:
ACTION_PACKAGE_FIRST_LAUNCH
- Inviato a il pacchetto di installazione di un'applicazione al primo avvio di quest'ultima (ovvero la prima volta che viene spostato fuori da uno stato interrotto). I dati contiene il nome del pacchetto.ACTION_MY_PACKAGE_REPLACED
- Invia una notifica un'applicazione che è stata aggiornata con una nuova versione una versione esistente. Viene inviato solo all'applicazione che è stata sostituita. it non contiene dati aggiuntivi. Per riceverlo, dichiara un filtro per intent per questa azione. Puoi utilizzare l'intent per attivare il codice che ti consente di ottenere dell'applicazione per tornare alla corretta esecuzione dopo un upgrade.Questo intent viene inviato direttamente all'applicazione, ma solo se quest'ultima è stato eseguito l'upgrade mentre era in stato avviato (non in stato arrestato).
Utilità principali
- Cache LRU
- Una nuova classe
LruCache
consente alle tue applicazioni di trarre vantaggio da una memorizzazione efficiente nella cache. Le applicazioni possono utilizzare la classe per ridurre il tempo trascorso calcolando o scaricando dati dalla rete, mantenendo un comportamento per i dati memorizzati nella cache.LruCache
è una cache che contengono forti riferimenti a un numero limitato di valori. Ogni volta che un valore viene a cui si accede viene spostato in cima a una coda. Quando un valore viene aggiunto a un , il valore alla fine della coda viene rimosso e potrebbe diventare idoneo per garbage collection.
- Una nuova classe
- Descrittore del file come
int
- Ora puoi ottenere il descrittore di file nativo int per un
ParcelFileDescriptor
utilizzando uno dei nuovi metodigetFd()
odetachFd()
.
- Ora puoi ottenere il descrittore di file nativo int per un
WebKit
- Cookie dello schema di file
- L'
CookieManager
ora supporta i cookie che utilizzano il Schema URIfile:
. Puoi utilizzaresetAcceptFileSchemeCookies()
per Abilita/disabilita il supporto per i cookie dello schema file, prima di creare un'istanza diWebView
oCookieManager
. In unCookieManager
, puoi verificare se i cookie dello schema di file viene attivato chiamandoallowFileSchemeCookies()
.
- L'
- Notifica di richiesta di accesso
- Per supportare le funzionalità di accesso automatico del browser introdotte in Android 3.0, la
nuovo
metodo
onReceivedLoginRequest()
invia una notifica all'organizzatore a cui è stata elaborata una richiesta di accesso automatico per l'utente.
- Per supportare le funzionalità di accesso automatico del browser introdotte in Android 3.0, la
nuovo
metodo
- Classi e interfacce rimosse
- Diverse classi e interfacce sono state rimosse dall'API pubblica, che in precedenza era in stato deprecato. Consulta l'API Report Differenze per ulteriori informazioni.
Browser
L'applicazione Browser aggiunge le seguenti funzionalità per supportare il web applicazioni:
- Supporto per la riproduzione in linea di video incorporati in HTML5
Tag
<video>
. La riproduzione è con accelerazione hardware, se possibile. - Supporto dei livelli per elementi con posizione fissa per tutti i siti (dispositivi mobili e desktop).
Costanti delle nuove caratteristiche
La piattaforma aggiunge nuove costanti di funzionalità hardware che gli sviluppatori possono dichiarare
nei file manifest dell'applicazione, per informare entità esterne come Google
Riproduzione dei requisiti dell'applicazione per le nuove funzionalità hardware supportate
in questa versione della piattaforma. Gli sviluppatori dichiarano queste e altre funzionalità
costanti negli elementi manifest di <uses-feature>
.
android.hardware.usb.accessory
: l'applicazione utilizza l'interfaccia USB API per comunicare con dispositivi hardware esterni collegati tramite USB fungono da host.android.hardware.usb.host
: l'applicazione utilizza l'API USB. per comunicare con dispositivi hardware esterni collegati tramite USB e funzionare come dispositivi mobili.
Google Play filtra le applicazioni in base alle funzionalità dichiarate negli elementi manifest di <uses-feature>
. Per ulteriori informazioni
che dichiara le funzionalità in un file manifest dell'applicazione, leggi Google Play
Filtri.
Report Differenze API
Per una visualizzazione dettagliata di tutte le modifiche API in Android 3.1 (API Livello 12), consulta l'API Report Differenze.
Livello API
La piattaforma Android 3.1 offre una versione aggiornata di l'API del framework. API per Android 3.1 viene assegnato un identificatore intero, 12, 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.1 nella tua applicazione:
devi compilare l'applicazione sulla base della libreria Android fornita in
la piattaforma SDK Android 3.1. In base alle tue esigenze, puoi
potrebbe
devi aggiungere anche un android:minSdkVersion="12"
all'elemento <uses-sdk>
nel codice
del file manifest.
Per saperne di più, consulta la pagina Che cos'è l'API Livello?