public BTDiscoveryListener() {
this.devices = new Hashtable<String, RemoteDevice>();
}
/* Metodo definito dall'interfaccia DiscoveryListener */
public void startInquiry() {
try {
// Accesso al LocalDevice per iniziare la scansione dei dispositivi
LocalDevice localDevice = LocalDevice.getLocalDevice();
DiscoveryAgent discoveryAgent = localDevice.getDiscoveryAgent();
// Inizio della scansione dei dispositivi. La libreria avvia un nuovo Thread
// per lo svolgimento di questa operazione
discoveryAgent.startInquiry(DiscoveryAgent.LIAC, this);
} catch (Exception e) {
e.printStackTrace();
}
}
/* Metodo definito dall'interfaccia DiscoveryListener:
viene invocato automaticamente ogni volta che viene trovato un nuovo dispositivo */
public void deviceDiscovered(
javax.bluetooth.RemoteDevice remoteDevice,
javax.bluetooth.DeviceClass deviceClass) {
// Mettiamo il dispositivo trovato in una Hashtable
devices.put(remoteDevice.getBluetoothAddress(), remoteDevice);
}
/* Metodo definito dall'interfaccia DiscoveryListener:
viene invocato automaticamente quando termina l'operazione di discovery */
public void inquiryCompleted(int param) {
if (param == DiscoveryListener.INQUIRY_COMPLETED
|| param == DiscoveryListener.INQUIRY_TERMINATED) {
// Se l'operazione di discovery termina correttamente, stampiamo a video i
// dispositivi trovati e memorizzati nell'Hashtable
Enumeration<RemoteDevice> enumeration = devices.elements();
while(enumeration.hasMoreElements()) {
RemoteDevice device = enumeration.nextElement();
try {
System.out.println("Device [" + device.getBluetoothAddress()
+ ", " + device.getFriendlyName(true) + "]");
} catch (IOException e) {
System.err.println("Impossibile recuperare il nome del dispositivo: "
+ device.getBluetoothAddress());
}
}
} else {
System.out.println("Nessun dispositivo trovato.");
}
}
public void serviceSearchCompleted(int arg0, int arg1) {}
public void servicesDiscovered(int arg0, ServiceRecord[] arg1) {}
}
public class BluetoothExample {
public static void main(String[] args) {
DiscoveryListenerImpl listener = new BTDiscoveryListener();
listener.startInquiry();
}
}
In particolare, la classe DiscoveryListenerImpl rappresenta l'implementazione dell'interfaccia javax.bluetooth.DiscoveryListener di cui abbiamo parlato al paragrafo precedente. Secondo tale implementazione, ogni volta che un nuovo dispositivi viene trovato, questo viene inserito in una Hashtable. Al termine dell'operazione di discovery, nel caso in cui l'operazione sia terminata correttamente, i dispositivi così trovati verranno stampati a video.
Per testare il codice è necessario assicurarsi che l'adattatore Bluetooth sia stato collegato al PC e che il telefonino sia stato configurato e predisposto per accettare connessioni Bluetooth.
Conclusioni
In questo articolo abbiamo accennato a quali siano le principali caratteristiche del Bluetooth. Abbiamo visto quale sia il ruolo della specifica JSR-82 nello sviluppo di applicazioni basate su questa tecnologia su piattaforma Java e come, per iniziare a lavorare, sia necessario procurasi un'implementazione di uno stack Bluetooth compatibile con JSR-82. Abbiamo inoltre sottolineato la necessità di utilizzare un adattatore USB Bluetooth per abilitare il nostro PC a comunicare attraverso questo protocollo. Nel prossimo articolo, vedremo come utilizzare i dispositivi trovati in fase di discovery per inviare loro un file, anziché stamparlo semplicemente a video.
Riferimenti
- [1] Standard Bluetooth
http://www.bluetooth.org
- [2]
http://jcp.org/aboutJava/communityprocess/final/jsr082/
- [3]
http://java.sun.com/javame/reference/apis/jsr082
