我正在寻找一种方法来 ping 一个BluetoothDevice
我只知道 MAC 地址的遥控器。我想知道(至少每秒一次或更快)该设备是否仍在我的 Android 手机范围内。我无权访问其他设备(因此我无法创建客户端软件)。如果我不需要 root 手机并且可以使用标准 API 那就太好了。但如果没有其他可能,我可以想象它会扎根。
我已经找到了这个问题,但它并没有真正解决我的问题。
我已经尝试了一些方法:
- 定期进行 DeviceDiscovery
hcitool -i hci0 inq --flush
结合使用hcidump
- 使用
l2ping
我什至尝试从BlueZ
堆栈中提取重要的行,并使用 JNI 将它们本地实现到我的代码中。
我对这些想法的问题:
- 太慢(每台设备每 9-13 秒只能找到一次)
- 太慢了(在 linux pc 上要快很多。在 android-phone 上它和 1 一样慢。)
- 它比大多数设备要快一点,
hcitool
但在大多数设备上它需要配对
我的下一个想法如下:
我想为远程设备创建一个不安全的套接字并在其上执行ServiceDiscovery
ping 操作。据我了解l2ping
,几乎相同(仅在没有可用 API 功能的情况下进行名称解析)。但我真的不知道如何执行ServiceDiscovery
. 我几乎从 Android 阅读了整个蓝牙 API,并尝试了类似createInsecureRfcommSocketToServiceRecord(UUID myUUID)
不同 UUID 的东西,但我真的不知道我在做什么。
所以我有两个问题:
- 如何以编程方式执行远程
ServiceDiscovery
操作?BluetoothDevices
- 还有其他方法/想法,如何定期 ping 蓝牙设备?
编辑:
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){}