我正在寻找一种ping远程BluetoothDevice
的方法我只知道它的MAC地址。我想知道(至少每秒一次或更快)设备是否仍然在我的Android手机范围内。我无法访问其他设备(因此无法创建客户端软件)。如果我不需要根电话就可以了,我可以使用标准的API。但如果没有其他可能性,我可以设想根除它。
我已经找到了this question,但它并没有真正解决我的问题。
我已经尝试过某些方法:
hcitool -i hci0 inq --flush
与hcidump
l2ping
我甚至试图从BlueZ
堆栈中提取重要的行,并使用JNI将它们原生化为我的代码。
我对这些想法的疑问:
hcitool
快一点,但在大多数设备上都需要配对我的下一个想法如下:
我想为远程设备创建一个不安全的套接字,并在其上执行ServiceDiscovery
作为一种ping。据我所知l2ping
几乎相同(只有名称解析,其中没有API函数可用)。但我真的不知道如何执行ServiceDiscovery
。我差点从Android上读取整个蓝牙API,尝试使用不同UUID的createInsecureRfcommSocketToServiceRecord(UUID myUUID)
,但我真的不知道我在那里做什么。
所以我有两个问题:
ServiceDiscovery
上执行远程BluetoothDevices
?修改
mMyDevice = mBluetoothAdapter.getRemoteDevice(MY_MAC);
mMyUUID = UUID.fromString("00001105-0000-1000-8000-00805F9B34FB");
try {
mBT_Socket = mMyDevice.createInsecureRfcommSocketToServiceRecord(mMyUUID);
mBluetoothAdapter.cancelDiscovery();
mBT_Socket.connect();
}catch(Exception e){}
答案 0 :(得分:0)
我希望分享的一个想法是ping附近的设备将使用发送蓝牙请求到附近的设备 OBEX Push UUID。我不确定需要多长时间,但值得一试。在此方法中,您可以使用RFComm Socket与另一台设备上的OBEX Server建立连接。注意每个设备都有一个 运行本机OBEX服务器,可以接收OBEX推送请求。 OBEX Push UUID为“00001105-0000-1000-8000-00805F9B34FB”。
如果附近的蓝牙设备不可用,您的客户端设备将无法连接到附近的设备 断开连接1-2秒。
你可以在这里注意两件事的时间框架 1.如果附近的设备可用,需要多长时间才能建立连接? 2.知道您是否无法建立连接需要多长时间。如果蓝牙设备不可用?