Encontrando os dispositivos móveis disponíveis – J2ME
O exemplo abaixo lista os dispositivos que estão remotamente disponíveis para o dispositivo local. Ele lista também os dispositivos que tem o bluetooth desligado.
import
javax.microedition.midlet.*;
import
javax.microedition.lcdui.*;
import
javax.bluetooth.*;
import
java.util.Vector;
import
java.util.Hashtable;
import
java.util.Enumeration;
import
java.io.IOException;
public class
BluetoothMidlet
extends
MIDlet
implements
CommandListener, Runnable, DiscoveryListener {
private
Display display;
private
Command discover,exit;
LocalDevice local;
private
DiscoveryAgent discoveryAgent;
private
Hashtable bluetoothDevices =
new
Hashtable();
List deviceList;
public
BluetoothMidlet() {
display = Display.getDisplay(
this
);
discover =
new
Command(
"Encontrar"
,Command.SCREEN,
0
);
exit =
new
Command(
"Sair"
,Command.EXIT,
0
);
// Lista de dispositivosDevice List
deviceList =
new
List(
"Selecione o dispositivo"
, List.IMPLICIT);
deviceList.addCommand(exit);
deviceList.setCommandListener(
this
);
}
public void
startApp() {
Form form =
new
Form(
"Devices"
);
form.addCommand(discover);
form.addCommand(exit);
form.setCommandListener(
this
);
display.setCurrent(form);
}
public void
pauseApp() {}
public void
destroyApp(
boolean
unconditional) {}
private void
doBluetoothDiscovery() {
Thread t =
new
Thread(
this
);
t.start();
}
// Implementa Runnable
public void
run() {
bluetoothDiscovery();
}
public void
printString(String s) {
System.out.println(s);
}
private void
bluetoothDiscovery() {
LocalDevice localDevice;
try
{
localDevice = LocalDevice.getLocalDevice();
}
catch
(BluetoothStateException e) {
printString(
"BluetoothStateException: "
+ e);
return
;
}
discoveryAgent = localDevice.getDiscoveryAgent();
RemoteDevice devices[];
try
{
devices = discoveryAgent.retrieveDevices(DiscoveryAgent.CACHED);
if
(devices !=
null
) {
for
(
int
i=
0
; i < devices.length; i++) {
bluetoothDevices.put(devices[i].getFriendlyName(
false
),
devices[i]);
printString(
"Device (cached): "
+ d
evices[i].getFriendlyName(
false
) +
" "
+ devices[i].getBluetoothAddress() );
}
}
devices = discoveryAgent.retrieveDevices(DiscoveryAgent.PREKNOWN);
if
(devices !=
null
) {
for
(
int
i=
0
; i < devices.length; i++) {
bluetoothDevices.put(devices[i].getFriendlyName(
false
),
devices[i]);
printString(
"Device (cached): "
+
devices[i].getFriendlyName(
false
) +
" "
+ devices[i].getBluetoothAddress() );
}
}
}
catch
(IOException e) {
printString(
"Exception (b2): "
+ e);
}
try
{
discoveryAgent.startInquiry(DiscoveryAgent.GIAC,
this
);
}
catch
(BluetoothStateException e) {
printString(
"Exception (b3): "
+ e);
}
printString(
"retorna de bluetoothDiscovery()"
);
}
public void
commandAction(Command c, Displayable d) {
if
(c == exit) {
notifyDestroyed();
destroyApp(
true
);
}
if
(c == discover) {
doBluetoothDiscovery();
}
}
private void
bluetoothCopyDeviceTableToList() {
for
(
int
i=deviceList.size(); i >
0
; i--) {
deviceList.delete(i-
1
);
}
for
(Enumeration e = bluetoothDevices.keys(); e.hasMoreElements(); ) {
try
{
String name = (String) e.nextElement();
deviceList.append( name,
null
);
}
catch
(Exception exception) {
}
}
display.setCurrent(deviceList);
}
// ************************************************
// Implementa BT DiscoveryListener
// ************************************************
public void
deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
try
{
printString(
"deviceDisc: "
+ btDevice.getFriendlyName(
false
));
// Adiciona o dispositivo
bluetoothDevices.put(btDevice.getFriendlyName(
false
), btDevice);
}
catch
(Exception e) {
printString(
"Exception (b4): "
+ e);
}
}
public void
servicesDiscovered(
int
transID, ServiceRecord[] servRecord) {
}
public void
serviceSearchCompleted(
int
transID,
int
respCode) {
}
public void
inquiryCompleted(
int
discType) {
printString(
"inquiryCompleted! "
+ discType);
bluetoothCopyDeviceTableToList();
}
// ************************************************
// ************************************************
}