API di 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 una serie di skin di emulatori e altro ancora. Per iniziare a sviluppare o testare versioni su Android 2.3, utilizza Android SDK Manager per scaricare la piattaforma nel tuo SDK.

Panoramica dell'API

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

VoIP basati su SIP

La piattaforma ora include uno stack di protocollo SIP e un'API framework che consente agli sviluppatori di creare applicazioni di telefonia via internet. Utilizzando l'API, le applicazioni possono offrire funzionalità di chiamata vocale senza dover gestire sessioni, comunicazioni a livello di trasporto o audio. Queste funzionalità 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. Una volta stabilita una chiamata audio, le applicazioni possono silenziare le 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 discrezione del produttore e dell'operatore associato. Per questo motivo, le applicazioni devono utilizzare il metodo isApiSupported() per verificare se il supporto SIP è disponibile, prima di esporre la funzionalità di chiamata agli utenti.

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, consulta la guida per gli sviluppatori SIP.

Near Field Communication (NFC)

Android 2.3 include uno stack NFC e un'API framework che consente agli sviluppatori di leggere i tag NDEF che vengono 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 interagiscono con l'hardware del dispositivo per rilevare i tag quando vengono raggiunti. Quando viene rilevato un tag, la piattaforma invia una notifica alle 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 tag e messaggi mirati. 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 i "record" di trasporto dei dati vengono trasmessi tra dispositivi e tag. Le applicazioni possono ricevere questi messaggi dagli intent ACTION_TAG_DISCOVERED.
  • NdefRecord, fornito in un NdefMessage, che descrive il tipo di dati condivisi e trasmette i dati stessi.

La comunicazione NFC si basa sulla tecnologia wireless presente nell'hardware del dispositivo, pertanto il supporto delle funzionalità NFC della piattaforma su dispositivi specifici è determinato dai relativi produttori. Per determinare il supporto NFC sul dispositivo corrente, le applicazioni possono chiamare isEnabled() per eseguire una 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 la tecnologia NFC. Per richiedere l'applicazione di filtri, aggiungi <uses-feature android:name="android.hardware.nfc" android:required="true"> al manifest dell'applicazione.

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

Giroscopio e altri sensori

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

Tieni presente che il set specifico di sensori hardware disponibile 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 dagli 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, visita la pagina Sensor.

Supporto di più fotocamere

Le applicazioni ora possono utilizzare qualsiasi fotocamera disponibile sul dispositivo, per l'acquisizione di foto o video. Camera consente alle applicazioni di richiedere il numero di videocamere disponibili e le caratteristiche uniche 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 richiedere le videocamere disponibili e 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 fotocamera specifica.

Per esaminare il codice campione per l'accesso a una fotocamera anteriore, vedi CameraPreview.java nell'applicazione ApiDemos di esempio.

L'API Camera aggiunge anche:

Effetti audio mixabili

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

Per esaminare il codice campione 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 per un determinato file di destinazione. DownloadManager eseguirà il download in background, occupandosi delle interazioni HTTP e riprovando i download in caso di errori o in caso di modifiche alla connettività e 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, in modo da 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 sullo spazio di archiviazione esterno (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 funzionalità di sistema chiamata StrictMode. Se implementato in un'applicazione, StrictMode rileva e avvisa lo sviluppatore di attività involontarie del disco o di rete che potrebbero ridurre le prestazioni dell'applicazione, ad esempio attività che si verificano sul thread principale dell'applicazione (dove vengono ricevute le operazioni dell'interfaccia utente e vengono eseguite anche animazioni). Gli sviluppatori possono valutare i problemi di utilizzo della rete e del disco sollevati in StrictMode e correggerli se necessario, mantenendo il thread principale più reattivo ed 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 metodi pratici per gestire i criteri thread e VM che si applicano all'istanza.
  • StrictMode.ThreadPolicy e StrictMode.VmPolicy contengono i criteri che definisci e applichi alle istanze thread e VM.

Per ulteriori informazioni su come utilizzare StrictMode per ottimizzare la tua applicazione, consulta la documentazione del corso 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 Views, le applicazioni possono attivare/disattivare l'overscroll per una determinata visualizzazione, impostare la modalità di overscoll, controllare la distanza di scorrimento orizzontale e gestire i risultati dello scorrimento.
    • Nei widget, le applicazioni possono controllare le caratteristiche di overscroll come l'animazione, lo springback e la distanza di overscroll. 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 di overscroll.
  • Supporto per il filtro touch
    • Nuovo supporto per il filtro touch, che consente a un'applicazione di migliorare la sicurezza delle viste che forniscono accesso a funzionalità sensibili. Ad esempio, il filtro touch è appropriato per garantire la sicurezza delle azioni dell'utente, come concedere una richiesta di autorizzazione, effettuare un acquisto o fare clic su un annuncio. Per ulteriori dettagli, consulta Visualizzare la documentazione della classe.
    • Nuovo attributo filterTouchesWhenObscured per gli elementi vista, che dichiara se filtrare i tocchi quando la finestra della vista è oscurata da un'altra finestra visibile. Se il criterio è impostato 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 per la sicurezza.

    Per esaminare il codice campione per il filtro touch, 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 archivia 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 è stata estesa per includere le informazioni dell'"ID puntatore", che consentono alle applicazioni di tenere traccia delle singole dita mentre si spostano su e giù. Il corso aggiunge vari metodi che consentono a un'applicazione di funzionare in modo efficiente con gli eventi di movimento.
    • Il sistema di input ora dispone della 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 puntatore separatamente durante un evento di movimento e garantisce un'adeguata continuità dei puntatori valutando la distanza tra l'ultimo insieme di puntatori successivo e l'ultimo insieme.
  • Controlli di selezione del testo.
    • Un nuovo metodo setComposingRegion consente a un'applicazione di contrassegnare un'area di testo come composizione del testo, mantenendo lo stile attuale. 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 di selezione del testo e lo stile per la finestra contenitore.
  • Gestione attività
  • Stili di testo e icone delle notifiche
  • Schermi molto grandi

    La piattaforma ora supporta schermi di dimensioni molto grandi, come quelli 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 di altro tipo, consulta la sezione Supporto di più schermi.

    Grafica

    Fornitori di contenuti

    • Nuova classe provider AlarmClock per impostare o gestire una sveglia. Il provider contiene un'azione ACTION_SET_ALARM per intent ed extra che possono essere utilizzati per avviare un'attività al fine di 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 vogliono creare una nuova sveglia devono usare Context.startActivity(), in modo che l'utente abbia la possibilità di scegliere quale applicazione sveglia utilizzare.
    • MediaStore supporta una nuova azione intent, PLAY_FROM_SEARCH, che consente a un'applicazione di cercare contenuti multimediali musicali e riprodurre automaticamente i contenuti del risultato, se possibile. Ad esempio, un'applicazione potrebbe attivare questo intent in seguito a un comando di riconoscimento vocale per ascoltare musica.
    • MediaStore aggiunge inoltre un nuovo flag MEDIA_IGNORE_FILENAME che indica allo scanner multimediale di ignorare i contenuti multimediali nella directory che lo contiene e nelle relative sottodirectory. Gli sviluppatori possono utilizzare questa opzione per evitare la visualizzazione di elementi grafici nella Galleria e allo stesso modo per impedire la visualizzazione di suoni e musica dell'applicazione nell'app Musica.
    • Il provider Settings aggiunge le nuove azioni Attività APPLICATION_DETAILS_SETTINGS e MANAGE_ALL_APPLICATIONS_SETTINGS, che consentono a un'applicazione di visualizzare 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 (Internet Telephony) di un contatto.

    Posizione

    • Ora LocationManager monitora le richieste dell'applicazione che comportano wakelock o blocchi del 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 loro tempi di aggiornamento minimi. Il provider della posizione di rete utilizza WorkSource per tenere traccia dei blocchi di riattivazione e del Wi-Fi avviati da un'applicazione e lo aggiunge all'utilizzo della batteria dell'applicazione segnalato in Gestisci applicazioni.

    • LocationManager aggiunge diversi nuovi metodi che consentono a una registrazione di 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 una serie di criteri per la selezione di un provider di località. Ad esempio, i provider possono essere ordinati in base a precisione, consumo energetico, capacità di segnalare altitudine, velocità, direzione e costo monetario.

    Spazio di archiviazione

    • Android 2.3 aggiunge un nuovo 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 (sebbene fornisca partizioni della scheda SD virtuale, quando non sono disponibili schede SD fisiche). Un metodo pratico, isExternalStorageRemovable(), consente alle applicazioni di determinare se è presente una scheda SD fisica.

    Gestione pacchetti

    • Nuove costanti per la dichiarazione delle 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 di installazione del pacchetto e dell'ultimo aggiornamento.
    • Nuovo metodo getProviderInfo() per recuperare tutte le informazioni note su una determinata classe di fornitori 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à, alle finestre

    Android 2.3 espone un ampio set di API ad applicazioni che utilizzano codice nativo. Le classi framework 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 proprio come avviene con 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 un'interfaccia di callback consentono al codice nativo di gestire le code di eventi.
    • La nuova interfaccia di SurfaceHolder.Callback2 consente al codice nativo di gestire una 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, consulta la pagina Android NDK.

    Runtime Dalvik

    Nuovi elementi ed attributi del file manifest

    • Nuovo attributo xlargeScreens per l'elemento <supports-screens>, per indicare se l'applicazione supporta fattori di forma dello schermo molto grandi. Per maggiori dettagli, vedi Supporto di più schermi.
    • Nuovi valori per l'attributo android:screenOrientation dell'elemento <activity>:
      • "reverseLandscape" - L'attività vorrebbe avere lo schermo in orientamento orizzontale, ruotato nella direzione opposta rispetto a quella normale.
      • "reversePortrait" - L'attività vorrebbe avere lo schermo con orientamento verticale, ruotato nella direzione opposta rispetto a quella verticale normale.
      • "sensorLandscape" - L'attività vorrebbe che lo schermo fosse in orientamento orizzontale, ma può utilizzare il sensore per cambiare la direzione.
      • "sensorPortrait" - L'attività vorrebbe che lo schermo fosse rivolto in 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 a come l'utente sposta il dispositivo. Ciò consente una qualsiasi delle 4 rotazioni possibili, indipendentemente da ciò che farà normalmente il dispositivo (ad esempio alcuni dispositivi in genere 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.

    Costanti di nuove funzionalità

    La piattaforma aggiunge diverse nuove funzionalità hardware che gli sviluppatori possono dichiarare nei manifest dell'applicazione come richieste dalle applicazioni. Ciò consente agli sviluppatori di controllare il modo in cui le loro applicazioni vengono filtrate quando pubblicate 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 sulle differenze API.

    Livello API

    La piattaforma Android 2.3 offre una versione aggiornata dell'API framework. All'API Android 2.3 viene assegnato un identificatore 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 nella tua applicazione le API introdotte in Android 2.3, devi compilare l'applicazione in base alla libreria Android fornita nella piattaforma Android 2.3 SDK. A seconda delle tue esigenze, potresti anche dover 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 Che cos'è il livello API?