关于android蓝牙开发的一些总结

   最近三个月一直在忙着公司的一个产品。这个产品主要是蓝牙和单片机之间的数据交换。当时在选择通讯方式的时候有2种选择。一种是wifi,另外一种就是后来选择的蓝牙。期间遇到了很多问题,包括蓝牙连接问题啊,android版本问题,bluesocket连接问题等等。
   1、android蓝牙连接配对问题:首先搜索了蓝牙,适配器搜索蓝牙设备后将结果以广播形式传出去,所以自定义一个继承广播的类,在onReceive方法中获得并处理蓝牙设备的搜索结果。最初的版本没有使用自动配对,是每次用户搜索完蓝牙找到蓝牙点击进行蓝牙的连接。但是就是那样,使用的是官方的api,在点击listview里的蓝牙时候,还会报上空指针错误,一直在找错误,但是至今没有找到。后来使用了自动配对的方法去实现蓝牙的连接和配对。但是对于第一次配对,成功的概率不高。对于这种情况我就开始对输入的pin进行监听使用的方法是matchBlutetooth.setPin(btDevice.getClass(), btDevice,"8888"); 。我监听的结果发现pin值是任意变化的而不是我设置的8888.但是因为项目比较紧,所以对于这个版本的app只能先将就的。
   2、蓝牙状态检测反应慢的问题。对于蓝牙断开的监测是使用广播去完成的。但是在开发过程中发现蓝牙断开后广播需要10秒左右才有响应,在此不能不吐槽下android蓝牙。
   3、bluesocket null判断。判断bluesocket连接状态,在4.0之前只能用null去判断socke是否为空,但是4.0之后增加了isconnected的方法。但是想用来判断蓝牙是否连接2种方法都是实现不了的。在开发中发现即使是断开状态isconnected也是等于true的。
   4、在数据传输过程中,对于socket通信。为了保证数据的完整性和正确性,采用了轮询监听的机制,也在指令中增加了一个状态位。用状态位去监听数据接收的完整。
   作为在android开发的菜鸟,第一次接触蓝牙通讯的开发。收获还是比较多的。对于以上出现的问题,只是我个人开发中遇到的问题。也许问题是因为开发中代码逻辑的不严谨造成的。

你可能感兴趣的:(关于android蓝牙开发的一些总结)