2012-06-20 201 views
4

我创建从我的HTC One X到SENA蓝牙不安全RFCOMM连接使用此代码ESD110系列模块:Android的蓝牙连接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地址之前,手机是否可能正在处理其他一些数据(服务发现和更多),以及如何让它连接更快? 或者它可能是宏达硬件问题?

回答

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,则可以更快地连接。漫长的等待时间imho来自发现 - 你只能连接,如果这是真的完成(不是直接完成后mBluetoothAdapter.cancelDiscovery();) - 这可能需要一些时间..

+0

嗨ligi,我用相同的'设备'与我的手机的mac地址做了两次连接 - 没有扫描,第一次连接花了15s,第二次花了15s ..我想手机是'扫描'的蓝牙模块的可用服务,它花了太长时间,但我已经给了手机服务uuid​​我需要... – itai

+0

嗨,感谢您的帮助,我编辑的代码,但我有一些错误使用reflaction:'BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(“00:01:95:13:5C:4F”);方法m = device.getClass()。getMethod(“createInsecureRfcommSocket”,new Class [] {int.class}); 的BluetoothSocket插座=(的BluetoothSocket)m.invoke(设备,Integer.valueOf(1));',但我得到:\t IllegalAccessException \t - 未处理的异常型 \t的InvocationTargetException – itai

+0

createInsecureRfcommSocket/createRfcommSocket/createInsecureRfcommSocketToServiceRecord/createeRfcommSocketToServiceRecord - 所有反光标识该函数返回那个错误..... – itai

0

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

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

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

请注意,有在创建一个连接的作品之一的情况,但需要更长的时间,然后正常。