如何使用API​​ ping蓝牙设备?

时间:2013-02-18 09:13:05

标签: android bluetooth

我正在寻找一种ping远程BluetoothDevice的方法我只知道它的MAC地址。我想知道(至少每秒一次或更快)设备是否仍然在我的Android手机范围内。我无法访问其他设备(因此无法创建客户端软件)。如果我不需要根电话就可以了,我可以使用标准的API。但如果没有其他可能性,我可以设想根除它。

我已经找到了this question,但它并没有真正解决我的问题。

我已经尝试过某些方法:

  1. 定期执行DeviceDiscovery
  2. hcitool -i hci0 inq --flushhcidump
  3. 结合使用
  4. 使用l2ping
  5. 我甚至试图从BlueZ堆栈中提取重要的行,并使用JNI将它们原生化为我的代码。

    我对这些想法的疑问:

    1. 太慢(每个设备每9-13秒只发现一次)
    2. 太慢了(在Linux上,它的速度要快很多。在Android手机上它的速度要慢一点。)
    3. 它比hcitool快一点,但在大多数设备上都需要配对
    4. 我的下一个想法如下:

      我想为远程设备创建一个不安全的套接字,并在其上执行ServiceDiscovery作为一种ping。据我所知l2ping几乎相同(只有名称解析,其中没有API函数可用)。但我真的不知道如何执行ServiceDiscovery。我差点从Android上读取整个蓝牙API,尝试使用不同UUID的createInsecureRfcommSocketToServiceRecord(UUID myUUID),但我真的不知道我在那里做什么。

      所以我有两个问题:

      1. 如何以编程方式在ServiceDiscovery上执行远程BluetoothDevices
      2. 还有其他方法/想法,如何定期ping蓝牙设备?
      3. 修改

            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){}
        

1 个答案:

答案 0 :(得分:0)

我希望分享的一个想法是ping附近的设备将使用发送蓝牙请求到附近的设备 OBEX Push UUID。我不确定需要多长时间,但值得一试。在此方法中,您可以使用RFComm Socket与另一台设备上的OBEX Server建立连接。注意每个设备都有一个 运行本机OBEX服务器,可以接收OBEX推送请求。 OBEX Push UUID为“00001105-0000-1000-8000-00805F9B34FB”。

如果附近的蓝牙设备不可用,您的客户端设备将无法连接到附近的设备 断开连接1-2秒。

你可以在这里注意两件事的时间框架 1.如果附近的设备可用,需要多长时间才能建立连接? 2.知道您是否无法建立连接需要多长时间。如果蓝牙设备不可用?