答案 0 :(得分:2)
据我所知,如果没有配对,就无法通过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,一次只能使用一个。因此,定义七(微微网使用的最大值)并尝试每一个直到 你找对了。