Android蓝牙开发的一些经验

转载 2015年11月18日 00:21:36


转载请注明来自:http://blog.csdn.net/icyfox_bupt/article/details/25487125

最近在实验室做项目,使用了Android的蓝牙开发,这里面有好多坑..所以还是希望能记下来这些东西和大家分享,不要再走我的老路了。


先说一下背景,开发手机与带蓝牙的智能设备(蓝牙血压计、血糖仪、手环等)设备对接的APP。也就是说,在设备端没有什么可以操作的,手机负责发起数据传输。

  1. 蓝牙连接,不需要配对

由于被曾经使用蓝牙的思路所误导,一直以为使用蓝牙是必须一个配对的过程的。实际上不是这样。搜索到设备以后,直接去connect设备而不去配对,目前在我这里是没问题的,搜索到设备以后,可以直接用一下代码进行连接:

    final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";     
    UUID uuid = UUID.fromString(SPP_UUID);     
    BluetoothSocket socket;      
    socket = device.createInsecureRfcommSocketToServiceRecord(uuid);

    adapter.cancelDiscovery();  
    socket.connect(); 

   这里的UUID是比较好用的一个,设备都可以识别。
  1. startDiscovey有可能启动失败

    一般程序中会有两步:开启蓝牙开始寻找设备。之前我写的代码是用户按下按钮就直接顺序执行这两步,导致的结果就是经常性搜索失败。仔细看了一下API,发现adapter.startDiscovery()函数是有一个boolean返回值的,也就是说如果启动失败就返回false。这就解释了为什么会启动失败了:顺序执行了开启蓝牙-寻找设备的步骤,但是由于蓝牙还没有完全打开,就开始寻找设备,导致寻找失败。于是最后我把代码改成了这样,问题解决:

    adapter = BluetoothAdapter.getDefaultAdapter();     
    if (adapter == null)     
    {     
        // 设备不支持蓝牙      
    }     
    // 打开蓝牙      
    if (!adapter.isEnabled())     
    {     
        adapter.enable();
        adapter.cancelDiscovery();
    }    
    
    // 寻找蓝牙设备,android会将查找到的设备以广播形式发出去      
    while (!adapter.startDiscovery()){
        Log.e("BlueTooth", "尝试失败");
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
  2. 接收数据转换

    使用socket.getInputStream接收到的数据是字节流,这样的数据是没法分析的。又由于一般来说厂家给的协议都是类似于"FA 22 89 D0"这样的十六进制数据,所以很多情况需要一个byte转十六进制String的函数:

    public static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    for ( int j = 0; j < bytes.length; j++ ) {
        int v = bytes[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);}

相关文章推荐

Android蓝牙开发经验总结(二)

本来要昨天写的,但是昨天一忙倒是把写博客这件事给忘了,继续上一篇的写。 上一篇写了我把官方的结构给改了,下面就直接上各个线程分开的代码了!public class AcceptThread exten...

关于Android蓝牙开发的一些经验之谈

最近在开发一款基于蓝牙的手机远程控制软件,程序没有分开服务端和客户端进行开发,而是把它们都集合在一起,在安装该软件的两台手机后可以通过搜索发现后进行匹配连接,然后通过主控端通过发送命令控制子机进行一些...

Android蓝牙开发经验总结(三)

前两篇已经写了主要的东西了,已经可以实现请求连接和接受连接的操作了,但是主控制界面的代码还没有贴上,其实Android官方自带的那个界面还是挺不错的,就是一个聊天的界面,但是我们项目需求的话用不到那样...

Android蓝牙开发的一些经验

转载请注明来自:http://blog.csdn.net/icyfox_bupt/article/details/25487125 最近在实验室做项目,使用了Android的蓝牙开发,这里面有好...

Android蓝牙开发经验总结(一)

版权声明:本文为博主原创文章,转载请注明博客地址,谢谢!一直以为在CSDN上面写日志的都是一些大牛,而且也觉得写博客是一种很好的学习总结的方法,但是也是由于自己没什么时间,也是觉得自己水平不够,没有什...

Android蓝牙开发的一些经验

转载请注明来自:http://blog.csdn.NET/icyfox_bupt/article/details/25487125最近在实验室做项目,使用了Android的蓝牙开发,这里面有好多坑.....

Android蓝牙编程经验总结——同时传输数据和音频

先是蓝牙编程基础,参考之前写的zhep

CSR蓝牙开发调试经验

1.FLASH版本(BC5MM 8670等)使用blueflash烧录程序。 2.ROM版本(57F 6145 8610等),EEPROM使用e2bluecmd烧录程序,FLASH使用NVSCMD烧...

蓝牙开发经验总结

蓝牙开发经验总结
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)