android连接蓝牙相关问题及解决方法

来源:互联网 发布:香港自由行攻略 知乎 编辑:程序博客网 时间:2024/05/19 13:43

开题感想

首先对于在新公司工作一年多的人来说,在目送人走人来的情况下,自己已逐渐成为一位所谓的“老员工”,感慨时光易逝啊。而自己所负责的主要是蓝牙通信的sdk的撰写,下面对蓝牙sdk连接的一些问题做简单的介绍。

Android sdk连接蓝牙

我们公司主要负责的是pos设备与蓝牙的通信连接,所以就简单的介绍我自己写代码时的一些收获和碰到的坑。

1.蓝牙连接分为有先配对再连接和不配对直接连接的。(很多人认为配对即是连接,类似手机蓝牙系统中点击配对后,就可以传送东西,其实不对),配对和连接是两回事。

2.介绍下用代码配对再连接蓝牙的。

配对的简单代码如下:

BluetoothDevice.class.getMethod("createBond", (Class[]) null)

.invoke(device, new Object[0]);

配对之后,我们接下来开始需要连接

连接之前,我们要考虑连接蓝牙的过程是一个耗费时效的过程,要有一定的时间去连接,所以需要开启一个新线程去连接蓝牙,

创建线程之后,建立BluetoothSocket socket=serverDevice.createRfcommSocketToServiceRecord(CUSTOM_UUID);

其中serverDevice是服务器设备BluetoothDevice对象。谨记一点,其中这个socket的创建赋值,有时候不同版本的手机需要进行适配,除了createRfcommSocketToServiceRecord这个建立方法,还有createInsecureRfcommSocketToServiceRecord要实事而定。

其中最重要的是CUSTOM_UUID,一定是要与设备建立正确uuid。每个设备都有自己独特的uuid,要根据实际情况具体修改。

创建完socket之后,我们可以直接调用系统的方法socket.connect();去连接蓝牙即可。

最后需要通信的话,直接调用socket.getOutputStream();socket.getInputStream()去得到输入流和输出流,用这些流去write和read数据。

出现socket.connect连接异常的问题解决

除了网上大部分博客上出现这些问题时的解决办法,其实对我而言用处不大,因为这个是需要根据手机以及设备来进行判断的。

1.一般会出现这种情况是手机蓝牙的配对问题,有的手机是必须要进行配对才能去连接的,这个时候你就要直接用代码去先进行配对,然后连接即可。

2.有的手机可能是需要不配对连接,但是一些版本的手机会弹出系统狂要求配对,你点击后配对就无法再进行连接,所以这个时候需要你去用代码取消配对,下面是取消代码配对的简单示例:

BluetoothDevice.class.getMethod("removeBond", (Class[]) null)

.invoke(device, new Object[0]);

所以配对和连接是两个概念,一定要理清这个状况再去解决连接问题。而且大部分都是代码可以解决的问题。

总结

最后总结一句:实践出真知,还是要多练习,才能找到问题的最佳解决方法。

原创粉丝点击