如何在没有配对的情况下使用蓝牙在Android编程中发送和接收数据?

时间:2011-06-27 13:58:17

标签: android sockets bluetooth

2 个答案:

答案 0 :(得分:2)

据我所知,如果没有配对,就无法通过RFCOMM套接字发送接收数据。我正在尝试使用我正在开发的应用程序。我的结果是:

  • 如果两个设备配对且可被发现,则可以进行双向通信
  • 如果两个设备配对,但“服务器”设备(Android设备尝试连接的设备)设置为可发现,则仍然可以进行双向通信
  • 如果两个设备未配对,但“服务器”设备 可被发现,则在进行双向通信之前仍需要配对请求。这意味着RFCOMM 客户端套接字(即来自Android的套接字)要求设备配对。这是在运行Android 2.2的三星Captivate上测试的。我发现这很奇怪,因为我可以理解在允许RFCOMM服务器套接字之前需要配对,但需要配对客户端套接字有点严格。

正如@ethrbunny所提到的,您也可以使用WiFi,在每台设备上设置并行服务器/客户端线程,并发送您想要的任何内容。要发现本地网络上的服务,您可以选择使用zeroconf。

答案 1 :(得分:1)

我从this Google groups post by Kristopher Micinski得到了以下内容。 希望它有所帮助。

  

我认为让这项工作成功的关键在于mUuid列表。

     

仔细看看这是做什么的:

for (int i = 0; i < Connection.MAX_SUPPORTED && myBSock == null; i++) {
    for (int j = 0; j < 3 && myBSock == null; j++) {
        myBSock = getConnectedSocket(myBtServer, mUuid.get(i));
        if (myBSock == null) {
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                Log.e(TAG, "InterruptedException in connect", e);
            }
        }
    }
}


  

此代码的作用似乎是连接到设备,但它是如何实现的   这样做?它使用多个UUID来多次尝试套接字   会议。

     

实质上,这意味着我们只能使用一次的UUID。所以相反   应用程序实现使用七个UUID,然后服务器侦听和   接受服务器端的每个UUID,这就是使用的   以下代码:

for (int i = 0; i < Connection.MAX_SUPPORTED && maxConnections > 0; i++) {
    BluetoothServerSocket myServerSocket = mBtAdapter.listenUsingRfcommWithServiceRecord(srcApp, mUuid.get(i));
    BluetoothSocket myBSock = myServerSocket.accept();
    myServerSocket.close(); // Close the socket now that the
    // connection has been made.

    String address = myBSock.getRemoteDevice().getAddress();

    mBtSockets.put(address, myBSock);
    mBtDeviceAddresses.add(address);
    Thread mBtStreamWatcherThread = new Thread(new BtStreamWatcher(address));
    mBtStreamWatcherThread.start();
    mBtStreamWatcherThreads.put(address, mBtStreamWatcherThread);
    maxConnections = maxConnections - 1;
    if (mCallback != null) {
        mCallback.incomingConnection(address);
    }
}
  

现在,在客户端的事情做了什么?客户没有   知道服务器当前有多少活动连接。

     

如果我们有一些商定的订单,客户必须使用我们可以   简单地使用它,但在我们的例子中,我们只需尝试每个UUID   按顺序,直到我们“找到合适的人。”

     

简短版本 - 使用多个UUID,一次只能使用一个。因此,定义七(微微网使用的最大值)并尝试每一个直到   你找对了。