import java.util.*; import java.io.*; import javax.microedition.io.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.bluetooth.*; import javax.obex.*; public class BluetoothGPSMidlet extends MIDlet implements CommandListener{ public Display display; public Form discoveryForm; public Form readyToConnectForm; public Form dataViewForm; public ImageItem mainImageItem; public Image mainImage; public Image bt_logo; public TextField addressTextField; public TextField subjectTextField; public TextField messageTextField; public Command selectCommand; public Command exitCommand; public Command connectCommand; public List devicesList; public Thread btUtility; public String btConnectionURL; //public StreamConnection connection; //public InputStream in; public boolean readData = false; public BluetoothGPSMidlet() { display=Display.getDisplay(this); discoveryForm = new Form("Bluetooth GPS"); try{ mainImage = Image.createImage("/btlogoBIG.png"); bt_logo = Image.createImage("/btlogo.png"); } catch (java.io.IOException e){ e.printStackTrace(); } mainImageItem = new ImageItem("Bluetooth GPS Reader", mainImage, Item.LAYOUT_CENTER, ""); discoveryForm.append(mainImageItem); discoveryForm.append("\nThis application will scan the area for Bluetooth devices and determine if any are offering wireless serial port services.\n\n"); btUtility = new BTUtility(); /// discoveryForm initialization exitCommand = new Command("Exit", Command.EXIT, 1); discoveryForm.addCommand(exitCommand); discoveryForm.setCommandListener(this); /// devicesList initialization devicesList = new List("Select a Bluetooth Device", Choice.IMPLICIT, new String[0], new Image[0]); selectCommand = new Command("Select", Command.ITEM, 1); devicesList.addCommand(selectCommand); devicesList.setCommandListener(this); devicesList.setSelectedFlags(new boolean[0]); /// readyToConnectForm initialization readyToConnectForm = new Form("Ready to Connect"); readyToConnectForm.append("The selected Bluetooth device is currently offering a valid serial port service, and is ready to connect. Please click on the 'Connect' button to connect and read the data."); connectCommand = new Command("Connect", Command.ITEM, 1); readyToConnectForm.addCommand(connectCommand); readyToConnectForm.setCommandListener(this); /// dataViewForm initialization dataViewForm = new Form("Serial Data Viewer"); dataViewForm.append("The following lines of data are being read from the serial input:\n\n"); dataViewForm.addCommand(exitCommand); dataViewForm.setCommandListener(this); } public void commandAction(Command command, Displayable d) { if(command == selectCommand) { btUtility.start(); } if(command == exitCommand ) { readData = false; destroyApp(true); } if(command == connectCommand ) { Thread commReaderThread = new COMMReader(); commReaderThread.start(); display.setCurrent(dataViewForm); } } public void startApp() { display.setCurrent(discoveryForm); } public void pauseApp() { } public void destroyApp(boolean b) { notifyDestroyed(); } //////////////// /** * This is an inner class that is used for finding * Bluetooth devices in the vicinity * */ class BTUtility extends Thread implements DiscoveryListener { Vector remoteDevices = new Vector(); Vector deviceNames = new Vector(); DiscoveryAgent discoveryAgent; // obviously, 0x1101 is the UUID for // the Serial Profile UUID[] uuidSet = {new UUID(0x1101) }; // 0x0100 is the attribute for the service name element // in the service record int[] attrSet = {0x0100}; public BTUtility() { try { LocalDevice localDevice = LocalDevice.getLocalDevice(); discoveryAgent = localDevice.getDiscoveryAgent(); discoveryForm.append(" Searching for Bluetooth devices in the vicinity...\n"); discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this); } catch(Exception e) { e.printStackTrace(); } } public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass cod) { try{ discoveryForm.append("found: " + remoteDevice.getFriendlyName(true)); } catch(Exception e){ discoveryForm.append("found: " + remoteDevice.getBluetoothAddress()); } finally{ remoteDevices.addElement(remoteDevice); } } public void inquiryCompleted(int discType) { if (remoteDevices.size() > 0) { // the discovery process was a success // so let's out them in a List and display it to the user for (int i=0; i 0){ serialData = new byte[lengthavai]; int length = in.read(serialData); System.out.println("data read: " + new String(serialData)); dataViewForm.append(new String(serialData)); } } in.close(); connection.close(); }catch(IOException ioe){ ioe.printStackTrace(); } } } }