Android蓝牙未显示配对对话框

Android蓝牙未显示配对对话框,android,android-bluetooth,pairing,Android,Android Bluetooth,Pairing,我正在尝试将我的HTC myTouch 3G与蓝牙设备配对,该设备将通过SPP向手机传输数据。我查看了聊天示例,发现它们缺少我所需要的内容,因为我需要的数据速率很高,而且聊天示例在UI线程上会阻塞。但是,我的主要问题是,当我尝试连接当前未配对的设备时,Bluetooth API表示,如果设备需要配对代码,它将自动弹出一个对话框。这永远不会发生。我如何确保它是正确的?这是我的密码 BluetoothSocket btSocket; String macAddress = data.getStrin

我正在尝试将我的HTC myTouch 3G与蓝牙设备配对,该设备将通过SPP向手机传输数据。我查看了聊天示例,发现它们缺少我所需要的内容,因为我需要的数据速率很高,而且聊天示例在UI线程上会阻塞。但是,我的主要问题是,当我尝试连接当前未配对的设备时,Bluetooth 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

关于这一点,有一件奇怪的事情看起来像是一个bug,那就是如果我运行这段代码,但它失败了,那么我会关闭蓝牙并将其重新打开,设备在堆栈中显示为成对的。据我所知,myTouch上的蓝牙芯片是2.1,我们尝试连接的芯片是1.2。这似乎是该手机蓝牙的一个缺陷,其他具有相同BT芯片和版本的手机没有这个问题。我目前在某些手机上遇到蓝牙(使用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,就像你的一样,所以这应该不是问题

当我尝试使用反射时,我突然在野火上成功了,不幸的是,在传奇和银河系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 });

不幸的是,在许多设备中,专有蓝牙协议栈的实现往往很差。哦,非常正确。好吧,将三星Galaxy S升级到2.3.3解决了该款手机的问题,而无需更改应用程序中的任何内容。我想这证明了专有Bt堆栈的问题存在。这是好消息,谢谢。Fredricus,你还记得你的设备以前的版本吗?嗨,我遇到了同样的问题,你有多确定这是一个特定于设备的问题?我在多台设备上都遇到过这种情况,还有一个问题:我听说我很确定这是一台设备,是什么操作系统以及蓝牙芯片。这完全取决于制造商如何解读蓝牙规范。我在一些三星、摩托罗拉、LG和其他制造商身上看到过这种情况,同样的制造商生产不同的手机,它工作正常。这真是一帆风顺。所以我跳过了所有的,如果可能的话,通过使用不安全的连接绕过了I。你在我的帖子中看到解决方案了吗?这可能是你的问题吗?在应用程序上启用蓝牙的两种方式中,您使用哪一种?