我正在创建一个应用程序,用于与蓝牙信标通信Android移动设备。我已经成功实现了一个信标(充当客户端)和一个Android移动设备(充当服务器,侦听连接)。请在下面找到代码片段
客户端应用
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(MACaddress);
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString("f3c74f47-1d38-49ed-8bbc-0369b3eb277c"));
mBluetoothAdapter.cancelDiscovery();
socket.connect();
服务器应用
mmServerSocket = mBluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord("NAME", UUID.fromString("f3c74f47-1d38-49ed-8bbc-0369b3eb277c"));
socket = mmServerSocket.accept();
这可以与一个移动设备(服务器)一起使用,我可以通过扫描附近蓝牙设备来获得其MACaddress
。但是,考虑到范围内有大约20-25个移动设备的情况 - 扫描将消耗大量时间。我想在不进行扫描的情况下这样做。
是否可以在不使用服务器的MACaddress
的情况下实现此目的?可以仅使用独特的UUID建立连接吗?请注意,我不想配对设备。
也欢迎其他任何解决方案。谢谢!
您不能在不识别蓝牙设备本身的情况下创建与蓝牙设备的套接字连接,而蓝牙设备的唯一标识符是MAC地址。即使有一个Android API允许您单独通过UUID执行此操作,基础实现仍然必须搜索附近的设备(例如扫描),并找到一种使用UUID接受套接字连接的设备。因此,问题中提到的扫描仍必须发生。
是的,如果有许多蓝牙设备在周围,扫描可以使用一些功率和CPU密集型。您可以限制这两种方法:
-
仅简要扫描。对于您的用例,看来您可以扫描几秒钟,然后在找到支撑设备后停止。这不应该太密集。
-
使用Android 5.0 上的扫描过滤器仅匹配您感兴趣的设备。