Welcome, Guest. Please login or register.

Login with username, password and session length
February 04, 2012, 11:06:06 PM
Pages: [1]
  Print  
Topic: Bluetooth Chat midlet Working fine on emulator and doesn't work on real phones?  (Read 2076 times)
« on: March 19, 2009, 06:47:07 PM »
islam.abdo
Newbie

View Profile
*
Karma: +0/-0
Posts: 2



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..

Code:
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..

Code:
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..

Code:
public interface DeviceDiscoveryListener { 
    public void deviceDiscoveryCompleted(Vector discoveredDevices, String[] urls);
}

//MessageRecvListener Interface..
Code:
public interface MessageRecvListener {
    public void MessageReceived(String Message, RemoteDevice remoteDevice);
    public void appendLogRecord(String logMessage);
}

//MessageSender Class..

Code:
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..

Code:
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..
Logged
 
Pages: [1]
  Print  
 
Jump to:  

Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC