我正在使用以下代码从我的HTC One X创建不安全的rfcomm连接到SENA蓝牙ESD110串行模块:
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硬件问题吗?
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。 - itaiMethod m = device.getClass().getMethod("createRfcommSocket",new Class[] { int.class });
中,未处理的异常类型为NoSuchMethodException。 - itai.connect()
失败并出现众所周知的“无法启动发现”异常,那么上述反射方法就是一个众所周知的解决方法。然而,我改变了我的代码,直接使用反射方法,而不必先尝试.connect()
方法,现在它可以立即连接。所以我给个赞。 - Trevor