jaimin
jaimin

Reputation: 563

Transfer String from android to pc via bluetooth

Since many days i am going through many examples and questions related to my issue but nothing helps!

Aim

two way communication between pc(windows) and android (like passing msg to pc and acknowledgement from pc)

What i have done till now

I am able to send String to pc(windows) from my android device using bluetooth.

here is the code i used

private String sendFile(String mac_address, String device_name) {
    // TODO Auto-generated method stub
    String result="";
    btAdapter = BluetoothAdapter.getDefaultAdapter();
    BluetoothDevice device = btAdapter.getRemoteDevice(mac_address);
    Log.d("BT_SENDING_FILE",device_name+" "+mac_address);


    try {


        Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
        btSocket = (BluetoothSocket) m.invoke(device, 1);
         if(!btSocket.isConnected()){
                Log.d(" is connected Status",""+btSocket.isConnected());
           //   device.createInsecureRfcommSocketToServiceRecord(UUID);

            }
         btAdapter.cancelDiscovery();
         try{
                btSocket.connect();
                }catch(IOException e){
                     btSocket =(BluetoothSocket) device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}).invoke(device,1);
                     btSocket.connect();
                     Log.d("fall back","in catch clause");
                }

         byte[] msgBuffer = stringToSend.getBytes();
            outStream = btSocket.getOutputStream();
                outStream.write(msgBuffer);
                if (outStream != null) {
                    outStream.flush();

                }
                result = "sent";
             outStream.close();
             btSocket.close();
             Log.d("BLUETOOTH","Closing Socket");   
          } catch (Exception e) {
              System.out.println(e);
              Log.d("BLUETOOTH","exception while sending through bluetooth");
              result = "failed";
           e.getLocalizedMessage();
          } finally{}            
        return result;
}

this is running good without any problem.

Problem

But i am not able to receive any String from pc to android device. I have tried many things

I have tried this

            BluetoothSocket socket = null;
            BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter();

            while (true) {

                try {

                    // Creating a new listening server socket
                    Log.d("BT", ".....Initializing RFCOMM SERVER....");


                    mmServerSocket = mAdapter.listenUsingInsecureRfcommWithServiceRecord("Bluetooth", MY_UUID);  





                    // This is a blocking call and will only return on a
                    // successful connection or an exception    
                    Log.d("Socket","listening...");
                    socket = mmServerSocket.accept(120000);                   

                } catch (Exception e) {

                }
                try {
                    Log.d("Socket", "Closing Server Socket.....");
                    mmServerSocket.close();

                    InputStream tmpIn = null;
                    OutputStream tmpOut = null;

                    // Get the BluetoothSocket input and output streams

                    tmpIn = socket.getInputStream();
                    tmpOut = socket.getOutputStream();
                    Log.d("BT","IO stream init");
                    DataInputStream mmInStream = new DataInputStream(tmpIn);
                    DataOutputStream mmOutStream = new DataOutputStream(tmpOut);

                    // use the Input Stream to take the string from the client whoever is connecting
                    //similarly use the output stream to send the data to the client




                    StringBuilder sb = new StringBuilder();
                    while((ch = mmInStream.read())!= -1)
                        sb.append((char)ch);

                    String res = sb.toString();

                    Log.d("BT",res);
                    tv_response.setText(res));
                } catch (Exception e) {
                    //catch your exception here
                    e.printStackTrace();
                    Log.d("Exception","some thing went wrong");
                    e.getLocalizedMessage();

                }
            }
        }

I am using Blue Cove in windows. I HAVE GONE THROUGH BLUETOOTH CHAT SAMPLE PROJECT but dont understand any thing

your help is appreciated

thank you

Upvotes: 3

Views: 3629

Answers (1)

Pooja
Pooja

Reputation: 113

i tried following code and it was successful. it may help you

BluetoothSocket socket = null;
    while (true) {
        try {
            Log.i(ACCEPT_TAG, "Listening for a connection...");

            socket = mServerSocket.accept();
            Log.i(ACCEPT_TAG, "Connected to " + socket.getRemoteDevice().getName());

        } catch (IOException e) {
            break;
        }
        // If a connection was accepted
        if (socket != null) {
            // Do work to manage the connection (in a separate thread)
            try {
                // Read the incoming string.
                String buffer;

                DataInputStream in = new DataInputStream(socket.getInputStream());

                buffer = in.readUTF();  

                Intent i = new Intent(MESSAGE_RECEIVED_INTENT);
                i.putExtra("Message", String.format("%s", buffer));
                Log.d("BT response is",buffer);

                c.sendBroadcast(i);
            } catch (IOException e) {
                Log.e(ACCEPT_TAG, "Error obtaining InputStream from socket");
                e.printStackTrace();
            }
            try {
                mServerSocket.close();
            } catch (IOException e) { }
            break;
        }
    }

Be sure that your device is visible to all i.e scan mode is BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE else use this code

public void requestBTDiscoverable() {
    Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
    i.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);

    startActivityForResult(i, REQ);

    int result = 0;

    this.onActivityResult(REQ, result, i);
    Log.i(TAG, "Bluetooth discoverability enabled");
}

Upvotes: 3

Related Questions