我正在编写一个针对API 7的蓝牙应用程序(我的设备是API 8 - 2.2) . 当我尝试连接蓝牙插座时,弹出窗口提示用户与设备配对,但有时连接超时或失败 . 在这些情况下,弹出窗口消失而不点击任何内容,但设备在蓝牙设置中显示为“已配对但未连接” .
如果我直接从蓝牙设置连接到蓝牙设备,则不会发生这种情况;如果用户实际点击“配对”,设备仅显示“已配对但未连接” .
这是创建连接的代码,看起来很简单:
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,看看我是否可以从绑定设备集中删除设备(如果连接失败),但似乎这是不可能的 .
EDIT: 我注意到的一件事是,当我尝试连接我的应用程序时,我的笔记本电脑上出现提示,它最终会在我的笔记本电脑上得到设备试图配对的提示 .
如果我通过蓝牙设置连接,那么我会先得到提示配对设备,然后在设备成功后我得到设备尝试访问耳机服务的提示 . 我不确定这是否重要......
1 回答
您使用的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