关于Android蓝牙中Service discovery failed问题的解决

来源:互联网 发布:sql union sum 编辑:程序博客网 时间:2024/06/05 16:44

最有一段时间没有update了,一是因为近期末了,有些考试要准备,二是在尝试为女朋友写个小游戏作为元旦礼物,所以花了更多时间去看一些关于android游戏开发的书。技术类的书籍,我宁愿看英文原版的,虽然都是又厚又难读,但是我觉得有些中文翻译确实会感觉很奇怪、生硬,而且很多书都没有中文翻译。

前段时间实验室项目中的蓝牙连接问题,因为无论是我自己写的程序或者是论坛、安卓市场上比较成熟的软件都无法连接到我们的蓝牙模块,所以在BluetoothSSP作者李坚的介绍下在网上订购了另一款蓝牙模块,现在已经能够连上,虽然还有一点点问题,但是就在刚才,连接成功了,数据能够进行传输,虽然这还只是第一步,但是超级激动、以及巨大的成就感!

在程序调试过程中,DDMS中还曾看到过一个Service discovery failed的问题。在网上找了很久,印象最深刻的是CSDN上的一篇文章,这位兄弟的解决方法很复杂,所以让我印象深刻。或许因为太复杂了,所以我没有理解好,所以我没能用他的问题解决问题。

后来我找android自带的Bluetooth sample来看,按照sample中类似的方法,终于解决了bug。具体如下:

//我原来的代码:

BluetoothSocket socket;

try {
BluetoothDevice device = foundDevices.get(params[0]);
socket = device.createRfcommSocketToServiceRecord(uuid);
socket.connect();
} catch (IOException e) {
Log.d("BLUETOOTH_CLIENT", e.getMessage());
}
return null;
}

//参照sample中的例子,修改后的代码:

BluetoothDevice device = foundDevices.get(params[0]);
BluetoothSocket tmp = null;

try {
tmp = device.createRfcommSocketToServiceRecord(uuid); //应该是这里导致Service discovery failed问题

} catch (IOException e) {
Log.d("BLUETOOTH_CLIENT", e.getMessage());
}
socket = tmp;
// return null;
try{
socket.connect();
} catch (IOException e) {
Log.d("BLUETOOTH_CLIENT", e.getMessage());
}
return null;
}

只是这样的小改动,竟然就能够实现连接正常,有时候bug的事真是很无奈。share出来仅供有类似问题的兄弟参考。

0 0