6 Temmuz 2009 Pazartesi

Bluetooth Java

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 try{
devicesList.append(((RemoteDevice)remoteDevices.elementAt(i)).getFriendlyName(true), bt_logo);
} catch (Exception e){
devicesList.append(((RemoteDevice)remoteDevices.elementAt(i)).getBluetoothAddress(), bt_logo);
}
}
display.setCurrent(devicesList);
} else {
// handle this
}

}


public void run(){

try {
RemoteDevice remoteDevice = (RemoteDevice)remoteDevices.elementAt(devicesList.getSelectedIndex());
discoveryAgent.searchServices(attrSet, uuidSet, remoteDevice , this);

} catch(Exception e) {
e.printStackTrace();
}
}



public void servicesDiscovered(int transID, ServiceRecord[] servRecord){

for(int i = 0; i < servRecord.length; i++) {

DataElement serviceNameElement = servRecord[i].getAttributeValue(0x0100);
String _serviceName = (String)serviceNameElement.getValue();
String serviceName = _serviceName.trim();
btConnectionURL = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);

}
display.setCurrent(readyToConnectForm);
readyToConnectForm.append("\n\nNote: the connection URL is: " + btConnectionURL);

}

public void serviceSearchCompleted(int transID, int respCode) {

if (respCode == DiscoveryListener.SERVICE_SEARCH_COMPLETED) {
// the service search process was successful

} else {
// the service search process has failed
}

}

}
////////////////


////////////////

/**
* This is an inner class that is used for reading
* the serial stream of data from a RFCOMM device
*
*/
class COMMReader extends Thread {

public COMMReader() {

}

public void run(){

try{
StreamConnection connection = (StreamConnection)Connector.open(btConnectionURL);

//
// open an input stream to get some data
//

InputStream in = connection.openInputStream();

byte[] serialData;
readData = true;
while(readData == true){
int lengthavai=0;
lengthavai = in.available();

if(lengthavai > 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();
}


}


}

}







Hiç yorum yok: