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:
- attivare/disattivare il servizio Bluetooth (e leggerne lo stato corrente)
- effettuare una scansione dei dispositivi Bluetooth limitrofi (e conoscerne l’indirizzo, la classe e il friendly name
- effettuare il pairing con un device remoto
- aprire una connessione seriale RFCOMM verso un dispositivo remoto
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: