我正在尝试将我的HTC myTouch 3G与蓝牙设备配对,该设备将通过SPP将数据传输到手机。我查看了聊天示例,发现它们缺少我需要的东西,因为我需要高数据速率,而Chat示例会在UI线程上阻塞。但是,我说我的主要问题是当我尝试连接当前未配对的设备时,蓝牙API会说如果设备需要配对代码,它会自动弹出一个对话框。这从未发生过。我如何确保它确实如此?这是我的代码......
BluetoothSocket btSocket;
String macAddress = data.getStringExtra("mac");
Log.d(TAG, "Found Device " + macAddress);
// Get the Bluetooth adapter on the device
BluetoothAdapter bta = ((MyApplication)this.getApplication()).getBtState();
BluetoothDevice btDevice = bta.getRemoteDevice(macAddress);
BluetoothSocket tmp = null;
try {
tmp = btDevice.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
} catch (IOException e) {
e.printStackTrace();
}
if (tmp != null) {
btSocket = tmp;
bta.cancelDiscovery();
try {
btSocket.connect();
} catch (IOException e) {
try {
Log.e(TAG, "------------- Close IOException");
btSocket.close();
} catch (IOException e2) {
Log.e(TAG, "unable to close() socket during connection failure", e2);
}
}
}
这也是我得到的错误:
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Adapter:DeviceCreated from /org/bluez/14284/hci0
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Adapter:PropertyChanged from /org/bluez/14284/hci0
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/14284/hci0/dev_00_02_5B_00_A5_0B
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/14284/hci0/dev_00_02_5B_00_A5_0B
DEBUG/BluetoothService(149): updateDeviceServiceChannelCache(00:02:5B:00:A5:0B)
DEBUG/BluetoothService(149): uuid(application): 00001101-0000-1000-8000-00805f9b34fb 1
DEBUG/BluetoothService(149): Making callback for 00001101-0000-1000-8000-00805f9b34fb with result 1
VERBOSE/BluetoothEventRedirector(13691): Received android.bleutooth.device.action.UUID
ERROR/MainApp(14272): ------------- Close IOException
ERROR/BluetoothService.cpp(149): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/14284/hci0/dev_00_02_5B_00_A5_0B
VERBOSE/BluetoothEventRedirector(13691): Received android.bleutooth.device.action.UUID
这个看起来像个错误的一个奇怪的事情是,如果我运行此代码并且它失败,那么我关闭蓝牙并将其重新打开设备显示为堆叠中的配对。根据我的理解,myTouch上的蓝牙芯片是2.1,我们尝试连接的芯片是1.2
答案 0 :(得分:4)
我目前在某些手机上遇到蓝牙问题(使用SPP)。您可以尝试的一件事是在创建套接字时使用反射。
我在开发蓝牙服务时使用了Nexus S(我实际上使用的是listenUsingRfcommWithServiceRecord方法),它在手机上运行正常。也适用于SonyEricsson Xperia ARC和SonyEricsson X10 Mini Pro。它不适用于HTC Wildfire(2.2.1),HTC Legend(2.2)和三星Galaxy S(2.2.1)。
我还应该提一下,我接收数据的设备也使用蓝牙1.2,就像你的一样,所以这应该不是问题。
当我尝试使用反射时,我突然在Wildfire上成功,遗憾的是仍然没有在Legend上或Galaxy S上取得进展。这就是我被困住的地方。许多论坛声称一些制造商拥有专有的蓝牙堆栈,所以我猜这就是造成这些问题的原因。无论如何,祝你好运!
UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
Method m = mAdapter.getClass().getMethod("createRfcommSocketToServiceRecord", new Class[] { UUID.class });
tmpSocket = (BluetoothServerSocket) m.invoke(mAdapter, new Object[] { MY_UUID });
答案 1 :(得分:1)
再次这似乎是该手机蓝牙的一个错误,其他具有相同BT芯片和版本的手机没有这个问题