Android Bluetooth API

luglio 26th, 2009


Android e iPhone OS hanno tante cose in comune, ma una e’ davvero fastidiosa e castrante per gli sviluppatori: lo stack Bluetooth e’ accessibile solo alle applicazioni di sistema ed e’ stato totalmente escluso dalle API pubbliche disponibili sugli SDK ufficiali.

Questo significa essenzialmente che e’ impossibile scrivere applicazioni in grado di connettersi a GPS esterni (o a qualsiasi altro tipo di sensore dotato di questa interfaccia), LEGO Mindstorms NXT, Arduino Bluetooth, lettori RFID con interfaccia Bluetooth e via dicendo. Si tratta certamente di una nicchia, ma resta comunque una nicchia piuttosto interessante e chi ci lavora spesso lo fa per divertimento o sperimentazione di frontiera. Senza contare le innumerevoli applicazioni industriali. Perche’ privarsene?

Leggendo il sorgente (http://source.android.com) e usando sistematicamente la reflection di Java, ho definito una API e scritto una libreria che consente di accedere alle funzionalità base dello stack Bluetooth di Android. In particolare la libreria consente di:

La Experimental Android Bluetooth Library e’ pubblicata gratuitamente sotto licenza Apache 2.0 ed e’ disponibile su:

http://code.google.com/p/android-bluetooth/

Rispetto a progetti simili, questa API (e la relativa implementazione) non richiede che l’accesso root al terminale. In altre parole, funziona su qualsiasi terminale commerciale, senza che sia necessario effettuare alcuna modifica al firmware. Essendo basata sulla reflection, funziona… finché Google non decidera’ di cambiare lo stack Bluetooth di Android (ed è verosimile che cambi, visto che il ramo del sorgente piu’ recente contiene pezzi di una nuova API e chiamate alla vecchia libreria precedente alla 0.9). Ho testato l’API con successo su Cupcake e sulla versione 1.1, il funzionamento sembra abbastanza stabile.

Una applicazione (chiamata “Bluetooth Samples”) che mostra funzionalità fornite dalla libreria è disponibile sull’Android Market. Il sorgente dell’applicazione e’ pubblicato insieme alla libreria su Google Code. L’applicazione consente anche di testare la connession RFCOMM, permettendo di connettersi ad un GPS Bluetooth del quale e’ visualizzato lo stream NMEA. Qui di seguito alcuni snapshot dell’applicazione:

bluetooth_samples_01.png

bluetooth_samples_02.png

bluetooth_samples_03.png

bluetooth_samples_05.png

bluetooth_samples_08.png

bluetooth_samples_09.png

bluetooth_samples_10.png

bluetooth_samples_11.png

bluetooth_samples_12.png

bluetooth_samples_13.png

16 Responses to “Android Bluetooth API”

  1. Andrea Says:

    Wow sembra un lavorone.

    > Perche’ privarsene?
    >
    Tradotto: ta faisi, te ne privi? :D

    Nonostante i problemi come questo, risolti da certi geniacci che si trovano in giro per la rete, non vedo l’ora di poter provare un terminale android e magari scrivere qualche app. Speriamo calino i prezzi :)

  2. Ottorino Bruni Says:

    Complimenti Stefano!

  3. gerdavax Says:

    @Andrea: all’inizio e’ stata sperimentazione “leggera”, giusto per vedere se l’idea della reflection era campata per aria oppure poteva dare qualche risultato decente. Poi la cosa e’ andata complicandosi… Ora sto lavorando alla funzionalita’ di discovery dei servizi remoti, in particolare per trovare i channel rfcomm di un dispositivo (e, dunque, poter automatizzare tutto il processo di connessione senza che il programmatore debba mettere un numero di canale hardcoded nell’applicazione). Quanto ai prezzi, credo che il Galaxy abbia un prezzo molto interessante…

    @Ottorino: Thanks :-)

    @Both: feedback sul campo molto molto graditi…

  4. Christian Says:

    Bellizzimo!
    grazie magister!

  5. gerdavax Says:

    Troppo buono! Macche’ magister! Sono un umile padawan!

  6. Andrea Baccega Says:

    Anche se te li ho gia fatti rinnovo i complimenti.. Appena riesco ci do un occhiata :)

  7. Dario Says:

    Non è che stai diventando di “troppo basso livello”… dai scherzo.. bravissimo!! :D

  8. gerdavax Says:

    @Andrea: grazie!

    @Dario: anzi, visto che ho usato pesantemente la reflection, piu’ “ad alto livello” di cosi’ proprio non avrei potuto fare :-) Scherzi a parte, Bluetooth e’ una passione quasi viscerale, mi riporta alla sperimentazione con la seriale dei primi PC (e ancora piu’ indietro ai modem packet radio con AM7910, quando AMD era ancora sconosciuta….)

  9. Cristian Says:

    Sicuramente, dopo questo post, farò il porting della apps da J2ME a Android!

    E poi che figata Android & Arduino! Sembrano quasi fratelli!

    Grazie Ste e felice giornata!

    :-D

  10. Start Says:

    Ciao,

    non riesco a trovare i sorgenti! :-s

  11. Start Says:

    Trovati, scusa!

  12. Lokidil Says:

    hey i try to initialize the bluetooth service with the following method LocalBluetoothDevice.initLocalDevice(context) but it throws null pointer exception how can i initialize the bluetooth service plz help me!!

  13. pedro Says:

    Is it possible to get the source code examples?

  14. gerdavax Says:

    @pedro: yes, you can download the source code of the “Bluetooth Samples” application (already published on the Android Market) in the SVN repository of the library. Check it out at: http://code.google.com/p/android-bluetooth

  15. mutnet Says:

    Salve, sto cercando di utilizzare l’esempio BluetoothChat con eclipse.
    Ho scaricato la libreria AndroidBluetoothAPI0.3 e l’ho aggiunta al porgetto.
    IL progetto però riporta degli errori.
    Come mai non funziona con Android 2.1 API 7
    (neanche con le 2.3.3 API 10)
    aggiungendo la libreira non dovrebbe essere tutto ok?
    Mentre se uso Android 3.0 API 11 gli errori spariscono anche eliminando la libreria.
    Il fatto è che poi vorrei testarlo con dei telefoni reali che non hanno Android 3.0.
    Sto sbagliando qualcosa?
    Grazie

  16. gerdavax Says:

    Ciao.
    La libreria Bluetooth che ho scritto è per Android 1.x. Per le versione 2.0 e successive puoi usare l’API standard. Il fatto che sulla 3.0 spariscano degli errori che sono presenti nela 2.1 può dipendere dall’uso di metodi non supportati dalle prime versioni della API Bluetooth di Android.

    Saluti,
    Stefano

Leave a Reply

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word