Android蓝牙开发的一些经验
来源:互联网 发布:mysql 连接数查看 编辑:程序博客网 时间:2024/05/21 09:21
转载请注明来自:http://blog.csdn.net/icyfox_bupt/article/details/25487125
最近在实验室做项目,使用了Android的蓝牙开发,这里面有好多坑..所以还是希望能记下来这些东西和大家分享,不要再走我的老路了。
先说一下背景,我是开发手机与带蓝牙的智能设备(蓝牙血压计、血糖仪、手环等)设备对接的APP。也就是说,在设备端没有什么可以操作的,手机负责发起数据传输。
- 蓝牙连接,不需要
配对
由于被曾经使用蓝牙的思路所误导,一直以为使用蓝牙是必须一个配对的过程的。实际上不是这样。搜索到设备以后,直接去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是比较好用的一个,设备都可以识别。
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(); }}
接收数据转换
使用
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);}
0 0
- Android蓝牙开发的一些经验
- Android蓝牙开发的一些经验
- Android蓝牙开发的一些经验
- Android蓝牙开发的一些经验
- Android蓝牙开发的一些经验
- Android蓝牙开发的一些经验
- Android蓝牙开发的一些经验
- Android蓝牙开发的一些经验
- Android蓝牙开发的一些经验
- Android蓝牙开发经验
- 安卓蓝牙开发的一些经验和教训
- 关于Android蓝牙开发的一些经验之谈
- 关于android蓝牙开发的一些总结
- android 开发中总结的一些经验
- android 开发中总结的一些经验
- 蓝牙----Android的蓝牙开发
- Android蓝牙的开发
- Android开发一些学习经验
- iOS中截图功能的实现
- selenium-安装-自动化环境准备-ide录制-1
- SVN:客户端适用独立客户端——TortoiseSvn
- for嵌套输出乘法表
- 设计模式(10)---责任链模式
- Android蓝牙开发的一些经验
- oracle循环插入数据
- iOS - 蓝牙库CoreBluetooth核心内容之central
- linux内核可变参数分析
- 什么是持久化?
- 回顾一下多态
- 萌新学习BaseActivity
- 【redis、jedis】使用ShardedJedisPool异常
- 来这里看看中国O2O最全生态图