即使连接失败,Android蓝牙配对设备

问题描述:

我正在编写一个针对API 7(我的设备是API 8-2.2)的蓝牙应用程序。当我尝试连接蓝牙套接字时,弹出窗口提示用户与设备配对,但有时连接超时或失败。在这些情况下,弹出消失而不点击任何内容,但设备在蓝牙设置中显示为“配对但未连接”。即使连接失败,Android蓝牙配对设备

如果我直接从蓝牙设置连接到蓝牙设备,则不会发生;如果用户实际点击“Pair”,设备只会显示“配对但未连接”。

下面是商建立连接的代码,它似乎很简单:

try { 
     BluetoothDevice btDevice = _btAdapter.getRemoteDevice(address); 
     _btAdapter.cancelDiscovery(); 
     sock = btDevice.createRfcommSocketToServiceRecord(SafConstants.BT_UUID); 
     sock.connect(); 
    } catch (IOException e) { 
     logger.error("socket connection failed", e); 
     if (sock != null) { 
      try {sock.close();} 
      catch (IOException e1) {} 
     } 
    } 

这是一个Android的问题还是我应该做点别的?我搜索了API以查看是否可以从绑定设备集中移除设备(如果连接失败),但似乎这是不可能的。

编辑:我注意到的一件事是,当我尝试通过我的应用程序进行连接时,笔记本电脑上会提示它正在尝试在配对之前访问耳机服务。几秒钟后,我终于会在我的笔记本电脑上看到设备正在尝试配对的提示。

如果我通过蓝牙设置进行连接,则会提示首先配对设备,然后成功提示设备尝试访问耳机服务。我不确定这是否重要...

+0

什么UUID您使用的?耳机? – 2011-03-23 16:16:02

+0

@ Dennis Mathews:我使用的是“00001101-0000-1000-8000-00805F9B34FB”,这是建议的[这里](http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#createRfcommSocketToServiceRecord% 28java.util.UUID%29)。如果我使用随机UUID,则根本无法连接到我的笔记本电脑,并且出现“服务发现失败”异常。 – ravun 2011-03-23 17:43:34

+0

这并不总是适用于每部手机,因为有些手机甚至不会让您手动配对,而且连接时不会显示的弹出对话框。如果Android操作系统不要求配对代码,我已经尝试了许多蓝牙配对的解决方法,并且主要打砖墙。希望谷歌可以解决这个问题,为传统的蓝牙。 – JPM 2011-06-09 17:02:25

您使用的UUID是SPP(串行端口配置文件),并且作为头戴式耳机,需要蓝牙配置文件 - A2DP(高级音频分配)。 目前,蓝牙堆栈的Android实现不支持蓝牙配置文件,仅仅是一个简单的骨骼实现。

要在Android上实现蓝牙配置文件支持,有一个名为“Sybase-iAnywhere-Blue-SDK-for-Android”的项目,该项目取代了Android的版本,并将所有接口提供到底层的蓝牙配置文件和协议。使用此功能,可以使用此SDK提供的BPP配置文件,使用Android手机通过蓝牙进行打印。

请参阅下面的详细信息链接:

链接1: http://www.sybase.com/detail?id=1064424

链接2: http://www.sybase.com/products/allproductsa-z/mobiledevicesdks/bluetoothsdks