android蓝牙rfcomm连接速度太慢

时间:2012-06-20 09:55:57

标签: android module bluetooth insecure-connection

我正在使用此代码从我的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硬件问题吗?

2 个答案:

答案 0 :(得分:1)

编辑如果您的问题是一个缓慢的服务发现,您可以尝试通过直接使用Reflection到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,则可以更快地连接。漫长的等待时间imho来自发现 - 如果真的完成,你只能连接(不是在mBluetoothAdapter.cancelDiscovery()之后直接完成;) - 这可能需要一些时间..

答案 1 :(得分:0)

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

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

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

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