Hi All,
I made a simple chatting midlet, that does device discovery, service discovery, establishing connection and chatting function..
It works fine on Sun Wireless Toolkit, but when I tried it on mobiles Nokia 6630 and Nokia N73, It worked only in device and service discovery and didn't work in chatting (sending & receiving messages).. Kindly find: SOURCE CODE ..
Please Help.. Cuz I must complete this phase rapidly..
Thanks in advance.
//Bluetooth publisher class..
public class BluetoothPublisher {
public String localhost;
public String name;
public String uuidString;
private MessageRecvListener listener;
public BluetoothPublisher(MessageRecvListener listener) {
this.listener = listener;
localhost = "btl2cap://localhost:";
uuidString = "00112233445566778899AABBCCDDEEFF";
name = ";name=BlueManet";
}
public void showMe() {
new Thread() {
public void run() {
try {
LocalDevice.getLocalDevice().setDiscoverable(DiscoveryAgent.GIAC);
listener.appendLogRecord("Local device got ;)\n");
String url = localhost + uuidString + name;
L2CAPConnectionNotifier notifier = (L2CAPConnectionNotifier)Connector.open(url);
listener.appendLogRecord("L2CAPConnectionNotifier opened ;)\n");
L2CAPConnection conn = null;
RemoteDevice remoteDevice;
int receiveMTU, dataLength;
byte[]data;
while(true) {
//listener.appendLogRecord("while true ;)\n");
conn = notifier.acceptAndOpen(); // busy waiting
//listener.appendLogRecord("acceptAndOpen ;)\n");
if(conn.ready()) {
listener.appendLogRecord("Connection is readyyyyyyyyyyy ;)\n");
remoteDevice = RemoteDevice.getRemoteDevice(conn);
listener.appendLogRecord("remoteDevice got ;)\n");
//listener.appendLogRecord("remoteDevice --> " + remoteDevice.getFriendlyName(false) + " ;)\n");
receiveMTU = conn.getReceiveMTU();
data = new byte[receiveMTU];
dataLength = conn.receive(data);
listener.appendLogRecord("connection received ... ;)\n");
String message = new String(data, 0, dataLength);
listener.appendLogRecord("message received --> " + message + " ;)\n");
//conn.close();
listener.appendLogRecord("connection closed ;) \n");
listener.appendLogRecord("I'll call listener.MessageReceived ;) \n");
listener.MessageReceived(message, remoteDevice);
}
}
} catch (IOException ex) {
ex.printStackTrace();
listener.appendLogRecord("exception found -publisher- --> " + ex.getMessage() + " ;)\n");
}
}
}.start();
}
}
//DeviceDiscoverer Class..
public class DeviceDiscoverer implements DiscoveryListener {
private String targetUUID;
private DeviceDiscoveryListener listener;
private Vector discoveredDevices, filteredDiscoveredDevices;
private DiscoveryAgent agent;
private int[] transIDs;
private String[] urls;
public DeviceDiscoverer(DeviceDiscoveryListener listener) {
this.listener = listener;
//--
discoveredDevices = new Vector();
filteredDiscoveredDevices = new Vector();
//--
targetUUID = "00112233445566778899AABBCCDDEEFF";
}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
discoveredDevices.addElement(btDevice);
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
for(int i = 0; i < servRecord.length; i++) {
// get the attribute which holds the service name
System.out.println("transID = "+transID);
DataElement dataElement = servRecord[i].getAttributeValue(0x0100);
// get the service name from the attribue
String serviceName = (String) dataElement.getValue();
if (serviceName.equals("BlueManet")) {
filteredDiscoveredDevices.addElement(discoveredDevices.elementAt(getIndex(transIDs, transID)));
}
}
urls = new String[filteredDiscoveredDevices.size()];
for(int i = 0; i < servRecord.length; i++) {
urls[i] = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
}
}
public void serviceSearchCompleted(int transID, int respCode) {
//Tell listener that I've finished discovery
listener.deviceDiscoveryCompleted(filteredDiscoveredDevices, urls);
}
public void inquiryCompleted(int discType) {
searchServices(discoveredDevices);
}
//-----------------
public int getIndex(int[]array, int target) {
for(int i = 0; i < array.length; i++) {
if(target == array[i]) {
return i;
}
}
return -1;
}
public void startSearching() {
try {
this.discoveredDevices.removeAllElements();
this.filteredDiscoveredDevices.removeAllElements();
agent = LocalDevice.getLocalDevice().getDiscoveryAgent();
agent.startInquiry(DiscoveryAgent.GIAC, this);
} catch (BluetoothStateException ex) {
ex.printStackTrace();
}
}
public void searchServices(Vector discoveredDevices) {
RemoteDevice remoteDevice;
int[] attrSet = { 0x0100 };// return service name attribute
UUID[] uuidSet = new UUID[1];
uuidSet[0] = new UUID(targetUUID, false);
//transIDs for all devices..
transIDs = new int[discoveredDevices.size()];
//Search Services On All Devices..
for(int i = 0; i < discoveredDevices.size(); i++){
try {
remoteDevice = (RemoteDevice) discoveredDevices.elementAt(i);
transIDs[i] = agent.searchServices(attrSet, uuidSet, remoteDevice, this);
} catch (BluetoothStateException ex) {
ex.printStackTrace();
}
}
}
}
//DeviceDiscoveryListener Interface..
public interface DeviceDiscoveryListener {
public void deviceDiscoveryCompleted(Vector discoveredDevices, String[] urls);
}
//MessageRecvListener Interface..
public interface MessageRecvListener {
public void MessageReceived(String Message, RemoteDevice remoteDevice);
public void appendLogRecord(String logMessage);
}
//MessageSender Class..
public class MessageSender implements Runnable {
private L2CAPConnection conn = null;
protected String destinationURL;
public byte[] message;
int dataLength;
//RemoteDevice remote;
private int transmitMTU = 0; // default Max Transmission Unit is 726bytes
// String Bluetooth_Address;
public MessageSender(String url, byte[] messageBytes) {
this.destinationURL = url;
this.message = messageBytes;
}
public void run() {
try {
conn = (L2CAPConnection)Connector.open(destinationURL);
transmitMTU = conn.getTransmitMTU();
if (message.length <= transmitMTU) {
dataLength = message.length;
//String messageformat = new String(message, 0, dataLength);
conn.send(message);
conn.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
//MIDLET SOURCE..
public class BlueManet extends MIDlet implements CommandListener, DeviceDiscoveryListener, MessageRecvListener {
private DeviceDiscoverer deviceDiscoverer;
private BluetoothPublisher bluetoothPublisher;
private String[] _urls;
//--
private boolean midletPaused = false;
/**
* The BlueManet constructor.
*/
public BlueManet() {
bluetoothPublisher = new BluetoothPublisher(this);
deviceDiscoverer = new DeviceDiscoverer(this);
}
//deviceDiscoveryListener abstract methods
public void deviceDiscoveryCompleted(Vector discoveredDevices, String[] urls) {
appendLogRecord("deviceDiscoveryCompleted --> " + discoveredDevices.size() + " ;) \n");
_urls = urls;
if(discoveredDevices.size() == 0) {
appendLogRecord("IF = 0 \n");
//getAlert().setString("No devices found");
//switchDisplayable(null, getAlert());
}
else{
appendLogRecord("ELSE \n");
//getAlert().setString(Integer.toString(discoveredDevices.size())+" devices found");
//switchDisplayable(null, getAlert());
fillDevicesList(discoveredDevices);
switchDisplayable(null, getListDevices());
}
}
//------------------------------------------------------------------------
//Filling devices list..
public void fillDevicesList(Vector discoveredDevices) {
RemoteDevice remoteDevice;
//ServiceRecord sr;
//Clear it then fill again..
getListDevices().deleteAll();
for(int i = 0; i < discoveredDevices.size(); i++) {
try {
remoteDevice = (RemoteDevice) discoveredDevices.elementAt(i);
getListDevices().append(remoteDevice.getFriendlyName(false), null);
} catch (IOException ex) {
ex.printStackTrace();
appendLogRecord("exception found -BlueManet- --> " + ex.getMessage() + " ;)\n");
}
}
}
public void MessageReceived(String Message, RemoteDevice remoteDevice) {
appendLogRecord("MessageReceived called --> " + Message + " ;) \n");
//---
getChatRoom().append(Message);
if(getDisplay().getCurrent() == blueManetForm) {
getTickerMainForm().setString(Message);
}
else if(getDisplay().getCurrent() == textBoxChatting) {
getTickerReceived().setString(Message);
}
appendLogRecord("LOG COMPLETED ... Al7amdulellah :) \n");
}
//------------------------------------------------------------------------
public void appendLogRecord(String logMessage) {
getFormLog().append(logMessage);
}
}
Please reply me as soon as possible, because I need that in my Graduation Project..
Thanks in advance..