4

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

4

2 回答 2

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(); 之后直接完成) - 这可能需要一些时间..

于 2012-06-20T10:59:09.447 回答
0

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

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

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

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

于 2012-06-20T14:10:55.177 回答