通过蓝牙将字符串从android传输到pc

时间:2014-09-26 09:49:09

标签: android windows bluetooth

由于很多天我会经历许多与我的问题相关的例子和问题,但没有任何帮助!

目标

pc(windows)和android之间的双向通信(比如将msg传递给pc和pc上的确认)

到目前为止我做了什么

我可以使用蓝牙从我的Android设备向PC(windows)发送字符串。

这是我使用的代码

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;
}

这没有任何问题。

问题

但我无法从PC接收任何字符串到Android设备。我尝试了很多东西

我试过这个

            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();

                }
            }
        }

我在Windows中使用Blue Cove。 我已经通过BLUETOOTH CHAT SAMPLE PROJECT ,但不明白任何事情

感谢您的帮助

谢谢

1 个答案:

答案 0 :(得分:2)

我尝试了以下代码并且成功了。它可能对你有帮助

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;
        }
    }

确保您的设备对所有可见,即扫描模式为BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE 否则使用此代码

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");
}