【问题标题】:android bluetooth rfcomm connect too slowandroid蓝牙rfcomm连接太慢
【发布时间】:2012-06-22 10:34:46
【问题描述】:

我正在使用以下代码从我的 HTC One X 到 SENA 蓝牙 ESD110 串行模块创建不安全的 rfcomm 连接:

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(addr);
BluetoothSocket socket = null;

try{
socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString(SERVICE_UUID));

 mBluetoothAdapter.cancelDiscovery();

socket.connect();
sendMessage(socket,"working!");
socket.close();

这里的重点是通过自动配对连接到模块, 一切正常,但建立连接大约需要 15 秒。

调试仍然在:

socket.connect();

15 秒,然后才连接字符串并将其传输到模块(需要 1 秒)。

在连接到 MAC 地址之前,手机是否可能正在处理一些其他数据(服务发现等),我将如何使其连接更快? 还是 HTC 硬件问题?

【问题讨论】:

    标签: android module bluetooth insecure-connection


    【解决方案1】:

    编辑如果缓慢的服务发现是您的问题,您可以尝试通过直接使用反射到 createRfcommSocket 方法来跳过整个服务发现来避免这种情况 - 我在我的 BT-SPP 中出于其他原因这样做相关项目 - 它看起来像这样:

    BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
    BluetoothDevice bd = bta.getRemoteDevice(mac);
    Method m = bd.getClass().getMethod("createRfcommSocket",new Class[] { int.class });
    bt_connection = (BluetoothSocket) m.invoke(bd, Integer.valueOf(1));
    

    预评论:你必须一直扫描吗?如果您可以选择记住 Mac,则可以更快地连接。漫长的等待时间恕我直言来自发现 - 只有当它真的完成时才能连接(不是在 mBluetoothAdapter.cancelDiscovery(); 之后直接完成) - 这可能需要一些时间..

    【讨论】:

    • hi ligi,我用手机的 mac 地址使用相同的“设备”连接了两次 - 没有扫描,第一次连接需要 15 秒,第二次连接需要 15 秒..我认为手机正在“扫描”蓝牙模块以获取可用服务,并且花费的时间太长,但我已经为手机提供了我需要的服务 uuid...
    • 嗨,感谢您的帮助,我编辑了代码,但使用反射时出现了一些错误:BluetoothDevice device = mBluetoothAdapter.getRemoteDevice("00:01:95:13:5C:4F"); Method m = device.getClass().getMethod("createInsecureRfcommSocket",new Class[] { int.class }); BluetoothSocket socket = (BluetoothSocket) m.invoke(device, Integer.valueOf(1)); 但我得到:IllegalAccessException - 未处理的异常类型 InvocationTargetException
    • createInsecureRfcommSocket/createRfcommSocket/createInsecureRfcommSocketToServiceRecord/createeRfcommSocketToServiceRecord - 所有对这个函数的反射都会返回错误.....
    • 你能不能把 m.setAccessible(true);在调用之前?
    • 实际上我得到:未处理的异常类型 NoSuchMethodException 上线:Method m = device.getClass().getMethod("createRfcommSocket",new Class[] { int.class });
    【解决方案2】:

    第二次更快吗?第一次找到手机(在您的设备获得目标设备的计时之前)需要一段时间。

    但是,即使它必须找到目标,也不应该花费 15 秒。

    也许你遇到了这个错误: http://code.google.com/p/android/issues/detail?id=29039

    请注意,有一种情况可以创建连接,但需要的时间比正常情况要长。

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多