通过蓝牙从安卓手机传输字符串到电脑

3

最近几天我一直在查阅与我的问题相关的例子和问题,但没有什么帮助!

目标

实现PC(Windows)和Android之间的双向通信(例如向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;
}

这个运行良好,没有任何问题。

问题

但我无法从电脑接收到任何字符串到安卓设备。我尝试了很多方法。

我已经尝试过这个:

            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。我已经尝试了蓝牙聊天样例项目,但是我并不理解任何东西。

非常感谢您的帮助。

谢谢您。

1个回答

3
我尝试了以下代码并且成功了。它可能对你有帮助。
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");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接