Un progetto a cui sto lavorando prevede il controllo tramite Android; ho quindi pensato che fosse l’occasione giusta per scrivere un tutorial su come utilizzare la connettività bluetooth in applicazioni Android…
Prerequisiti
Questo tutorial prevede che abbiate una minima conoscenza di come sviluppare una applicazione Android: in rete si possono trovare delle ottime guide, iniziando da quella ufficiale di Google. Potete scegliere l’IDE che più preferite: personalmente mi trovo bene con Eclipse + ADT plugin.
Sorgenti
Tutte le applicazioni di esempio verranno pubblicate in un repository su Github.
Application permissions
Perché la nostra applicazione possa utilizzare la connettività bluetooth del telefono, è necessario dichiarare di utilizzare tale funzionalità. Avrete infatti notato che quando si installa una nuova applicazione, Android chiede se si accetta di concedere a tale applicazione i permessi necessari al suo funzionamento.
Apriamo il file AndroidManifest.xml
Spostiamoci sul tab Permissions, quindi clicchiamo Add…
Selezioniamo Uses Permission
Infine selezioniamo android.permission.BLUETOOTH e salviamo il file
BluetoothAdapter
L’oggetto che consente di interfacciarsi con il modulo bluetooth del telefono è BluetoothAdapter.
Possiamo ottenere l’instanza di default tramite il metodo statico getDefaultAdapter():
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); |
Se il telefono non ha il modulo bluetooth, il metodo restituisce null; in questo caso possiamo visualizzare un messaggio di errore (Toast) e chiudere l’applicazione:
Toast.makeText(this, "This app requires a bluetooth capable phone", Toast.LENGTH_SHORT).show(); finish(); |
Dobbiamo quindi verificare che il modulo bluetooth sia abilitato, tramite il metodo isEnabled():
mBluetoothAdapter.isEnabled() |
In caso non sia abilitato, possiamo richiederne l’abilitazione tramite una Intent. Definiamo una costante per identificare la nostra richiesta; quindi creiamo una Intent e sottomettiamola al sistema Android:
private final int REQUEST_ENABLE_BT = 1; [...] Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); |
La nostra applicazione viene messa in secondo piano e all’utente appare un popup con la richiesta di abilitare il bluetooth:
Una volta che l’utente ha confermato (o negato) la richiesta di attivazione, viene chiamato il metodo onActivityResult, dove possiamo verificare se la richiesta ha avuto o meno esito positivo:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == REQUEST_ENABLE_BT) if(resultCode == RESULT_OK) listPairedDevices(); |
Paired devices
In questo primo esempio, andremo ad elencare i dispositivi già accoppiati (paired) al telefono. Un dispositivo bluetooth deve essere infatti accoppiato (eventualmente inserendo una password numerica) prima di poter stabilire la connessione.
Il metodo getBondedDevices() restituisce un Set di oggetti di tipo BluetoothDevice:
Set pairedDevices = mBluetoothAdapter.getBondedDevices(); |
Ogni dispositivo bluetooth ha un nome e un indirizzo (univoco); possiamo visualizzare in una TextArea i dati dei dispositivi accoppiati con un loop:
for(BluetoothDevice pairedDevice : pairedDevices) { textView2.append(Html.fromHtml("<strong>" + pairedDevice.getName() + "</strong>")); textView2.append(" (" + pairedDevice.getAddress() + ")\n"); } |
Ecco l’applicazione in esecuzione:
Next
Nella prossima parte di questo tutorial vedremo come effettuare lo scan e il pairing di nuovi dispositivi…
Interessante e utilissimo come sempre.
Grazie per il primo (e anche per il secondo) post sull’argomento. Ho preso un economico modulo BT HC-05 su Ebay e funziona alla grande con Arduino e l’app ArduDroid, per controllare PIN digitali e analogici.
Ma vorrei iniziare a farmi una App “DIY” che accenda e spenga i “soliti led”, e sono certo che seguendoti ci riuscirò 😉
un saluto
Ciao, sono alle prime armi con Eclipse. Non riesco a capire come devo fare per importare il sorgente.
Su Git c’è tutto diviso e non riesco a capire come devo importare i vari pezzi di sorgente.
Ho copiato ed incollato il Manifest, il Main activity e l’XML ma nel main di Java continua a darmi errori e non ho la minima idea del perché ci sono e di come devo fare per correggerli.
MA CON ECLIPSE NON C’E’ UN UNICO FILE PROJECT CHE UNA VOLTA APERTO IMPORTA AUTOMATICAMENTE TUTTE LE VARIE CARTELLE E FILES NECESSARI ???
Grazie,
Mauro
Rieccomi.
Ho provato con import ma non funzionava, mi dava invalid project,
poi ho intuito che bisognava mettere tutte le cartelle in un altro percorso e solo in questa condizione
importare nella cartella Workspace.
Ha importato tutto.