API Android 2.3

Livello API: 9

Per gli sviluppatori, la piattaforma Android 2.3 (GINGERBREAD) è disponibile come componente scaricabile per l'SDK Android. La piattaforma scaricabile include una libreria Android e un'immagine di sistema, oltre a un set di skin per emulatori e altro ancora. Per iniziare a sviluppare o testare la versione di Android 2.3, 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 della versione 2.3, incluse le nuove funzionalità e le modifiche dell'API framework rispetto alla versione precedente.

VoIP basato su SIP

La piattaforma ora include uno stack di protocollo SIP e un'API framework che consente agli sviluppatori di creare applicazioni di telefonia internet. Utilizzando l'API, le applicazioni possono offrire funzionalità di chiamata vocale senza dover gestire sessioni, comunicazione a livello di trasporto o audio. Queste vengono gestite in modo trasparente dall'API SIP e dai servizi della piattaforma.

L'API SIP è disponibile nel pacchetto android.net.sip. La classe della chiave è SipManager, che le applicazioni utilizzano per configurare e gestire i profili SIP, quindi avviare e ricevere chiamate audio. Dopo aver stabilito una chiamata audio, le applicazioni possono disattivare l'audio delle chiamate, attivare la modalità altoparlante, inviare toni DTMF e altro ancora. Le applicazioni possono anche utilizzare SipManager per creare connessioni SIP generiche.

Lo stack e i servizi SIP sottostanti della piattaforma sono disponibili sui dispositivi a discrezionalità del produttore e dell'operatore associato. Per questo motivo, prima di mostrare la funzionalità di chiamata agli utenti, le applicazioni devono utilizzare il metodo isApiSupported() per verificare se è disponibile il supporto SIP.

Per utilizzare l'API SIP, le applicazioni devono richiedere l'autorizzazione all'utente dichiarando <uses-permission android:name="android.permission.INTERNET"> e <uses-permission android:name="android.permission.USE_SIP"> nei file manifest.

Inoltre, gli sviluppatori possono richiedere filtri su Google Play, in modo che le loro applicazioni non siano rilevabili per gli utenti i cui dispositivi non includono lo stack e i servizi SIP della piattaforma. Per richiedere l'applicazione di filtri, aggiungi <uses-feature android:name="android.software.sip" android:required="true"> e <uses-feature android:name="android.software.sip.voip"> al manifest dell'applicazione.

Per ulteriori informazioni, leggi la guida per gli sviluppatori SIP.

Near Field Communication (NFC)

Android 2.3 include uno stack NFC e un'API framework che consentono agli sviluppatori di leggere i tag NDEF rilevati quando un utente tocca un dispositivo con supporto NFC per taggare elementi incorporati in adesivi, poster intelligenti e persino altri dispositivi.

La piattaforma fornisce i servizi NFC sottostanti che funzionano con l'hardware del dispositivo per rilevare i tag quando entrano nel raggio d'azione. Al rilevamento di un tag, la piattaforma notifica le applicazioni trasmettendo un intent, aggiungendo i messaggi NDEF del tag all'intent come extra. Le applicazioni possono creare filtri di intent per riconoscere e gestire i tag e i messaggi scelti come target. Ad esempio, dopo aver ricevuto un tag da Intent, le applicazioni estraggono i messaggi NDEF, li archiviano, avvisano l'utente o li gestiscono in altri modi.

L'API NFC è disponibile nel pacchetto android.nfc. Le classi chiave sono:

  • NfcAdapter, che rappresenta l'hardware NFC del dispositivo.
  • NdefMessage, che rappresenta un messaggio di dati NDEF, il formato standard in cui vengono trasmessi "record" per la trasmissione di dati tra dispositivi e tag. Le applicazioni possono ricevere questi messaggi dagli intent ACTION_TAG_DISCOVERED.
  • NdefRecord, inviato in un NdefMessage, che descrive il tipo di dati condivisi e porta i dati stessi.

La comunicazione NFC si basa sulla tecnologia wireless nell'hardware del dispositivo, pertanto il supporto delle funzionalità NFC della piattaforma su dispositivi specifici dipende dai relativi produttori. Per determinare il supporto NFC sul dispositivo corrente, le applicazioni possono chiamare isEnabled() per eseguire query su NfcAdapter. Tuttavia, l'API NFC è sempre presente, indipendentemente dal supporto hardware sottostante.

Per utilizzare l'API NFC, le applicazioni devono richiedere l'autorizzazione all'utente dichiarando <uses-permission android:name="android.permission.NFC"> nei file manifest.

Inoltre, gli sviluppatori possono richiedere filtri su Google Play in modo che le loro applicazioni non siano rilevabili per gli utenti i cui dispositivi non supportano NFC. Per richiedere l'applicazione di filtri, aggiungi <uses-feature android:name="android.hardware.nfc" android:required="true"> al manifest dell'applicazione.

Per vedere un'applicazione di esempio che utilizza l'API NFC, vedi NFCDemo.

Giroscopio e altri sensori

Android 2.3 aggiunge il supporto della piattaforma e dell'API per diversi nuovi tipi di lettura del sensore: giroscopio, vettore di rotazione, accelerazione lineare, gravità e barometro. Gli sviluppatori possono usare le nuove letture dei sensori per creare applicazioni che rispondono in modo rapido e fluido a cambiamenti precisi di posizione e movimento del dispositivo. L'API Sensor segnala le modifiche al giroscopio e ad altri sensori alle applicazioni interessate, indipendentemente dal fatto che siano in esecuzione nel framework dell'applicazione o nel codice nativo.

Tieni presente che l'insieme specifico di sensori hardware disponibili su un determinato dispositivo varia a discrezione del produttore del dispositivo.

Gli sviluppatori possono richiedere filtri su Google Play in modo che le loro applicazioni non siano rilevabili per gli utenti i cui dispositivi non offrono un sensore giroscopio. Per farlo, aggiungi <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"> al manifest dell'applicazione.

Per i dettagli sull'API, consulta Sensor.

Supporto di più fotocamere

Le applicazioni ora possono utilizzare qualsiasi fotocamera disponibile su un dispositivo, per l'acquisizione di foto o video. L'Camera consente alle applicazioni di interrogare il numero di videocamere disponibili e le caratteristiche univoche di ognuna.

  • La nuova classe Camera.CameraInfo memorizza le caratteristiche di posizione di una fotocamera (orientamento, fronte o retro).
  • I nuovi metodi getNumberOfCameras() e getCameraInfo() nella classe Camera consentono alle applicazioni di eseguire query relative alle videocamere disponibili e di aprire la fotocamera di cui hanno bisogno.
  • Il nuovo metodo get() consente alle applicazioni di recuperare un CamcorderProfile per una videocamera specifica.
  • Il nuovo getJpegEncodingQualityParameter() consente alle applicazioni di ottenere il livello di qualità dell'acquisizione di immagini fisse per una videocamera specifica.

Per esaminare il codice di esempio per accedere a una fotocamera anteriore, vedi FotocameraPreview.java nell'applicazione di esempio ApiDemos.

L'API Camera aggiunge anche:

Effetti audio combinabili

Il framework multimediale della piattaforma aggiunge il supporto per nuovi effetti audio per traccia o globali, tra cui bassi più intensi, virtualizzazione delle cuffie, equalizzazione e riverbero.

Per esaminare il codice di esempio per gli effetti audio, consulta AudioFxDemo.java nell'applicazione di esempio ApiDemos.

Il framework multimediale aggiunge anche:

  • Nuovo supporto del tag di altitudine nei metadati EXIF per i file JPEG. Nuovo metodo getAltitude() per recuperare il valore del tag di altitudine EXIF.
  • Il nuovo metodo setOrientationHint() consente a un'applicazione di indicare a MediaRecorder l'orientamento durante l'acquisizione video.

Gestione dei download

La piattaforma include un nuovo servizio di sistema DownloadManager che gestisce i download HTTP a lunga esecuzione. Le applicazioni possono richiedere il download di un URI in un particolare file di destinazione. DownloadManager eseguirà il download in background, occupandosi delle interazioni HTTP e riprovando i download dopo errori o tra le modifiche alla connettività e i riavvii del sistema.

  • Le applicazioni possono ottenere un'istanza della classe DownloadManager chiamando getSystemService(String) e passando DOWNLOAD_SERVICE. Le applicazioni che richiedono download tramite questa API devono registrare un ricevitore di trasmissione per ACTION_NOTIFICATION_CLICKED al fine di gestire correttamente i clic dell'utente su un download in esecuzione in una notifica o dall'interfaccia utente Download.
  • La classe DownloadManager.Request consente a un'applicazione di fornire tutte le informazioni necessarie per richiedere un nuovo download, ad esempio l'URI della richiesta e la destinazione del download. L'unico parametro obbligatorio è l'URI della richiesta. Tieni presente che la destinazione di download predefinita è un volume condiviso in cui il sistema può eliminare il file se ha bisogno di recuperare spazio per l'utilizzo da parte del sistema. Per l'archiviazione permanente di un download, specifica una destinazione di download sull'unità di archiviazione esterna (vedi setDestinationUri(Uri)).
  • La classe DownloadManager.Query fornisce metodi che consentono a un'applicazione di eseguire query e filtrare i download attivi.

Modalità rigorosa

Per aiutare gli sviluppatori a monitorare e migliorare le prestazioni delle loro applicazioni, la piattaforma offre una nuova struttura di sistema chiamata StrictMode. Quando viene implementato in un'applicazione, StrictMode rileva e avvisa lo sviluppatore di attività accidentali sul disco o di rete che potrebbero ridurre le prestazioni dell'applicazione, ad esempio l'attività che si svolge sul thread principale dell'applicazione (dove vengono ricevute le operazioni dell'interfaccia utente e vengono eseguite anche animazioni). Gli sviluppatori possono valutare i problemi relativi all'utilizzo della rete e del disco sollevati in StrictMode e, se necessario, correggerli, mantenendo il thread principale più reattivo e impedendo la visualizzazione delle finestre di dialogo ANR agli utenti.

  • StrictMode è la classe principale ed è il punto di integrazione principale con il sistema e la VM. La classe fornisce pratici metodi per gestire i criteri thread e VM che si applicano all'istanza.
  • StrictMode.ThreadPolicy e StrictMode.VmPolicy contengono i criteri che definisci e applichi ai thread e alle istanze VM.

Per ulteriori informazioni su come utilizzare StrictMode per ottimizzare la tua applicazione, consulta la documentazione della classe e il codice di esempio all'indirizzo android.os.StrictMode.

Framework UI

  • Supporto per lo scorrimento orizzontale
    • Nuovo supporto per l'overscroll in Visualizzazioni e Widget. In Viste, le applicazioni possono abilitare/disabilitare l'overscroll per una determinata vista, impostare la modalità di overscoll, controllare la distanza di scorrimento orizzontale e gestire i risultati dell'overscroll.
    • Nei widget, le applicazioni possono controllare le caratteristiche di overscroll, come animazione, springback e overscroll distanza. Per ulteriori informazioni, vedi android.view.View e android.widget.OverScroller.
    • ViewConfiguration fornisce anche i metodi getScaledOverflingDistance() e getScaledOverscrollDistance().
    • Nuovi attributi overScrollMode, overScrollFooter e overScrollHeader per gli elementi <ListView>, per controllare il comportamento dello scorrimento.
  • Supporto per il filtro al tocco
    • Nuovo supporto per i filtri touch, che consente a un'applicazione di migliorare la sicurezza delle viste che forniscono l'accesso a funzionalità sensibili. Ad esempio, il filtro touch è appropriato per garantire la sicurezza delle azioni degli utenti, come la concessione di una richiesta di autorizzazione, un acquisto o il clic su un annuncio. Per maggiori dettagli, consulta la documentazione del corso.
    • Il nuovo attributo filterTouchesWhenObscured per gli elementi della vista indica se filtrare gli tocchi quando la finestra della vista è oscurata da un'altra finestra visibile. Se è impostata su "true", la visualizzazione non riceverà tocchi ogni volta che appare un toast, una finestra di dialogo o un'altra finestra sopra la finestra della visualizzazione. Per maggiori dettagli, consulta Visualizzare la documentazione sulla sicurezza.

    Per esaminare il codice di esempio per il filtro al tocco, vedi SecureView.java nell'applicazione di esempio ApiDemos.

  • Gestione degli eventi migliorata
    • Nuova classe base per gli eventi di input, InputEvent. La classe fornisce metodi che consentono alle applicazioni di determinare il significato dell'evento, ad esempio eseguendo una query per InputDevice da cui ha avuto origine l'evento. KeyEvent e MotionEvent sono sottoclassi di InputEvent.
    • Nuova classe base per i dispositivi di input, InputDevice. La classe memorizza le informazioni sulle funzionalità di un particolare dispositivo di input e fornisce metodi che consentono alle applicazioni di determinare come interpretare gli eventi da un dispositivo di input.
  • Eventi di movimento migliorati.
    • L'API MotionEvent è estesa per includere informazioni "ID puntatore", che consentono alle applicazioni di tenere traccia delle singole dita mentre si spostano su e giù. Durante il corso sono stati aggiunti vari metodi per consentire a un'applicazione di funzionare in modo efficiente.
    • Il sistema di input ora dispone di una logica per generare eventi di movimento con le nuove informazioni sull'ID puntatore, sintetizzando gli identificatori quando i nuovi puntatori sono abbassati. Il sistema tiene traccia di più ID puntatori separatamente durante un evento di movimento e garantisce la continuità dei puntatori valutando la distanza tra l'ultimo e il successivo insieme di puntatori.
  • Controlli per la selezione del testo
    • Un nuovo metodo setComposingRegion consente a un'applicazione di contrassegnare un'area di testo come composizione del testo, mantenendo lo stile corrente. Un metodo getSelectedText restituisce il testo selezionato all'applicazione. I metodi sono disponibili in BaseInputConnection, InputConnection e InputConnectionWrapper.
    • Nuovi attributi textSelectHandle, textSelectHandleLeft, textSelectHandleRight e textSelectHandleWindowStyle per <TextView>, per fare riferimento ai disegnabili che verranno utilizzati per visualizzare gli ancoraggi per la selezione del testo e lo stile per la finestra contenitore.
  • Gestione attività
  • Stili di testo e icone delle notifiche
  • Schermi extra large

    La piattaforma ora supporta schermi di dimensioni molto grandi, come quelli che potrebbero essere presenti sui tablet. Gli sviluppatori possono indicare che le loro applicazioni sono progettate per supportare schermi di dimensioni molto grandi aggiungendo un elemento <supports screens ... android:xlargeScreens="true"> ai file manifest. Le applicazioni possono utilizzare un nuovo qualificatore delle risorse, xlarge, per codificare le risorse specifiche per schermi molto grandi. Per maggiori dettagli su come supportare schermi di dimensioni molto grandi e altre dimensioni, consulta Supporto di più schermi.

    Grafica

    Fornitori di contenuti

    • Nuova classe provider AlarmClock per impostare una sveglia o gestire una sveglia. Il provider contiene un'azione di intent ACTION_SET_ALARM e extra che possono essere utilizzati per avviare un'attività per impostare una nuova sveglia in un'applicazione sveglia. Le applicazioni che vogliono ricevere l'intent SET_ALARM devono creare un'attività che richiede l'autorizzazione SET_ALARM. Le applicazioni che desiderano creare una nuova sveglia devono utilizzare Context.startActivity(), per consentire all'utente di scegliere l'applicazione sveglia da utilizzare.
    • MediaStore supporta una nuova azione dell'intent, PLAY_FROM_SEARCH, che consente a un'applicazione di cercare contenuti multimediali musicali e, se possibile, di riprodurre automaticamente i contenuti dal risultato. Ad esempio, un'applicazione potrebbe attivare questo intent in seguito a un comando di riconoscimento vocale per ascoltare musica.
    • MediaStore aggiunge anche un nuovo flag MEDIA_IGNORE_FILENAME che indica allo scanner multimediale di ignorare i contenuti multimediali nella directory contenitore e nelle relative sottodirectory. Gli sviluppatori possono usare questa opzione per evitare che nella Galleria appaiano elementi grafici e che anche i suoni e la musica delle applicazioni vengano visualizzati nell'app Music.
    • Il provider Settings aggiunge le nuove azioni Attività APPLICATION_DETAILS_SETTINGS e MANAGE_ALL_APPLICATIONS_SETTINGS, che consentono a un'applicazione di mostrare la schermata dei dettagli di un'applicazione specifica o la schermata Gestisci applicazioni.
    • Il provider ContactsContract aggiunge il tipo di dati ContactsContract.CommonDataKinds.SipAddress per memorizzare l'indirizzo SIP (telefonia internet) di un contatto.

    Posizione

    • L'LocationManager ora tiene traccia delle richieste delle applicazioni che comportano wakelock o blocchi Wi-Fi in base a WorkSource, una classe gestita dal sistema che identifica l'applicazione.

      LocationManager tiene traccia di tutti i client che richiedono aggiornamenti periodici e ne informa i provider come parametro WorkSource quando impostano i tempi minimi di aggiornamento. Il provider di geolocalizzazione della rete utilizza WorkSource per monitorare i blocchi di riattivazione e Wi-Fi avviati da un'applicazione e li aggiunge all'utilizzo della batteria dell'applicazione segnalato in Gestisci applicazioni.

    • L'LocationManager aggiunge diversi nuovi metodi che consentono alla registrazione di un'attività di ricevere aggiornamenti della posizione periodici o una tantum in base a criteri specificati (vedi di seguito).
    • Una nuova classe Criteria consente a un'applicazione di specificare un insieme di criteri per la selezione di un fornitore di località. Ad esempio, i provider possono essere ordinati in base a accuratezza, consumo energetico, capacità di segnalare altitudine, velocità e rilevamento, nonché in base a costi monetari.

    Spazio di archiviazione

    • Android 2.3 aggiunge un nuovo elemento StorageManager che supporta i file OBB (Opaque Binary Blob). Sebbene il supporto della piattaforma per OBB sia disponibile in Android 2.3, gli strumenti di sviluppo per la creazione e la gestione dei file OBB non saranno disponibili fino all'inizio del 2011.
    • La piattaforma Android 2.3 aggiunge il supporto ufficiale per i dispositivi che non includono schede SD (anche se fornisce la partizione virtuale per schede SD, quando non sono disponibili schede SD fisiche). Un metodo di convenienza, isExternalStorageRemovable(), consente alle applicazioni di determinare se è presente una scheda SD fisica.

    Gestione pacchetti

    • Nuove costanti per la dichiarazione di funzionalità hardware e software. Consulta l'elenco nella sezione Nuove costanti funzionalità, di seguito.
    • PackageInfo aggiunge nuovi campi firstInstallTime e lastUpdateTime in cui è archiviata l'ora dell'installazione del pacchetto e dell'ultimo aggiornamento.
    • Nuovo metodo getProviderInfo() per recuperare tutte le informazioni note su una determinata classe di provider di contenuti.

    Telefonia

    • TelephonyManager aggiunge la costante NETWORK_TYPE_EVDO_B per specificare il tipo di rete CDMA EVDO Rev B.
    • Il nuovo metodo getPsc() restituisce il codice di scrambling principale della cella di pubblicazione su una rete UMTS.

    Accesso nativo al ciclo di vita delle attività, finestre

    Android 2.3 espone un ampio set di API alle applicazioni che utilizzano il codice nativo. Le classi quadro di interesse per queste applicazioni includono:

    • NativeActivity è un nuovo tipo di classe di attività, i cui callback del ciclo di vita sono implementati direttamente nel codice nativo. Un elemento NativeActivity e il codice nativo sottostante vengono eseguiti nel sistema come altre attività, in particolare nel processo di sistema dell'applicazione Android, vengono eseguiti nel thread dell'interfaccia utente principale dell'applicazione e ricevono gli stessi callback del ciclo di vita delle altre attività.
    • La nuova classe InputQueue e l'interfaccia di callback consentono di gestire le code di eventi tramite codice nativo.
    • La nuova interfaccia di SurfaceHolder.Callback2 consente al codice nativo di gestire un elemento SurfaceHolder.
    • I nuovi metodi takeInputQueue e takeSurface() in Window consentono al codice nativo di gestire eventi e piattaforme.

    Per informazioni complete sull'utilizzo del codice nativo o per scaricare l'NDK, visita la pagina Android NDK.

    Runtime Dalvik

    Nuovi elementi e attributi del manifest

    • Nuovo attributo xlargeScreens per l'elemento <supports-screens>, per indicare se l'applicazione supporta fattori di forma dello schermo molto grandi. Per i dettagli, consulta la sezione Supporto di più schermi.
    • Nuovi valori per l'attributo android:screenOrientation dell'elemento <activity>:
      • "reverseLandscape" - L'Attività desidera avere lo schermo in orientamento orizzontale, ruotato nella direzione opposta rispetto al normale.
      • "reversePortrait" - L'Attività desidera avere lo schermo con orientamento verticale, ruotato nella direzione opposta rispetto al normale.
      • "sensorLandscape" - L'Attività vorrebbe avere lo schermo con orientamento orizzontale, ma può utilizzare il sensore per cambiare la direzione in cui è rivolto lo schermo.
      • "sensorPortrait" - L'Attività vorrebbe avere lo schermo con orientamento verticale, ma può utilizzare il sensore per cambiare la direzione dello schermo.
      • "fullSensor": l'orientamento è determinato da un sensore di orientamento fisico: il display ruoterà in base al modo in cui l'utente muove il dispositivo. Ciò consente una qualsiasi delle 4 rotazioni possibili, indipendentemente da ciò che farà normalmente il dispositivo (ad esempio, alcuni dispositivi normalmente non utilizzano la rotazione di 180 gradi).

    Nuove autorizzazioni

    • com.android.permission.SET_ALARM: consente a un'applicazione di trasmettere un intent per impostare una sveglia per l'utente. Un'attività che gestisce l'azione SET_ALARM dell'intent deve richiedere questa autorizzazione.
    • android.permission.USE_SIP: consente a un'applicazione di utilizzare SIP API per effettuare o ricevere chiamate Internet.
    • android.permission.NFC: consente a un'applicazione di usare il NFC API per leggere i tag NFC.

    Nuove costanti di funzionalità

    La piattaforma aggiunge diverse nuove funzionalità hardware che gli sviluppatori possono dichiarare nei manifest delle loro applicazioni come richieste dalle loro applicazioni. Ciò consente agli sviluppatori di controllare il modo in cui la loro applicazione viene filtrata quando viene pubblicata su Google Play.

    Per informazioni complete su come dichiarare le funzionalità e utilizzarle per i filtri, consulta la documentazione relativa a <uses-feature>.

    Report sulle differenze API

    Per una visualizzazione dettagliata di tutte le modifiche all'API in Android 2.3 (Livello API 9), consulta il report Differenze API.

    Livello API

    La piattaforma Android 2.3 fornisce una versione aggiornata dell'API framework. All'API Android 2.3 viene assegnato un identificatore numero intero 9, memorizzato nel sistema stesso. Questo identificatore, chiamato "Livello API", consente al sistema di determinare correttamente se un'applicazione è compatibile con il sistema prima di installarla.

    Per utilizzare le API introdotte in Android 2.3 nella tua applicazione, devi compilare l'applicazione in base alla libreria Android fornita nella piattaforma Android 2.3 SDK. A seconda delle esigenze, potrebbe anche essere necessario aggiungere un attributo android:minSdkVersion="9" all'elemento <uses-sdk> nel file manifest dell'applicazione. 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 su versioni precedenti della piattaforma.

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