简体   繁体   中英

Reading Data from Bluetooth Data Transfer on Android

I am looking to get/read the Data I passed after I connected a couple of Android Devices, so far I pair, connect and transmit the information between them, but not sure how to implement the reading part, here I am not sure if I should use createRfcommSocketToServiceRecord or listenUsingRfcommWithServiceRecord to create the reading socket for this purpose.

I have two screens, one where the user push a button and transmit the info and the other where the receiver press another button and read the data, I wonder if the sync is incorrect and after I push the "send" button and then the "read" button the connection is unavailable or if this implementation is just not recomendable all together.

These are my two attempts:

Attempt 1:

    //Executed after the user press the read data button
    private void connectToServerSocket(BluetoothDevice device, UUID uuid) {

          try{                

                BluetoothServerSocket serverSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(device.getName(),uuid);

                //Here is where I get the error:
                //io to Server Socket JSR82 Connection is not created, failed or aborted
                BluetoothSocket clientSocket = serverSocket.accept();

                // Start listening for messages.
                StringBuilder incoming = new StringBuilder();
                listenForMessages(clientSocket, incoming);

                // Add a reference to the socket used to send messages.
                transferSocket = clientSocket;

          } catch (IOException ioe) {        
                this.printToast("Excep io toServerSocket:" + ioe.getMessage());
          } catch (Exception e) {
                this.printToast("Excep toServerSocket:" + e.getMessage());
          }

    }

Attempt 2:

   private void connectToServerSocket(BluetoothDevice device, UUID uuid) {

          try{ 

                BluetoothServerSocket clientSocket = device.createRfcommSocketToServiceRecord(uuid);
                 //clientSocket without method and invoke is not working either
                 Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
                 clientSocket = (BluetoothSocket) m.invoke(device, 1);

                //Here is where I get the error:
                //io to Server Socket JSR82 Connection is not created, failed or aborted
                clientSocket.connect();

                // Start listening for messages.
                StringBuilder incoming = new StringBuilder();
                listenForMessages(clientSocket, incoming);

                // Add a reference to the socket used to send messages.
                transferSocket = clientSocket;

          } catch (IOException ioe) {        
                this.printToast("Excep io toServerSocket:" + ioe.getMessage());
          } catch (Exception e) {
                this.printToast("Excep toServerSocket:" + e.getMessage());
          }

    }

On serverSocket.accept() or clientSocket.connect() I get the exception:

Connection is not created, failed or aborted

I would appreciate if anyone could guide me towards getting the data reading part working. Thanks.

Take a look at Android's BluetoothChat example included with the Android SDK. I think it does exactly what you want.

$ANDROID_SDK/samples/android-19/legacy/BluetoothChat/src/com/example/android/BluetoothChat

Read the managing the connection part. Its clearly written in the documentation how to exchange (read/write) info between devices through Bluetooth. http://developer.android.com/guide/topics/connectivity/bluetooth.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM