android ble 蓝牙4.0 cc2540 开发(一)

1、概述

公司做了两个蓝牙4.0的app项目,对于蓝牙4.0 ble的理解也从阅读官方的代码,各种代码到有自己的见解。

很多手机早前就有蓝牙4.0,但是android官方是在sdk 4.3以上才开始支持蓝牙4.0 一般app开发的现在都建议用户自行升级到android系统到4.3以上

才能使用开发的app。早前三星,摩托罗拉,lg,博通是有提供自己的蓝牙库的,因为大家使用的库不能统一,所以现在

开发ble app 一般是直接要求sdk4.3以上,用官方库开发。


2、demo

官方demo参见 :就不用找来找去了,装了该装的更新包,新建个工程,选择Android Sample Project,

在4.0以上的sdk里选择历程BluetoothLeGatt 这个工程就是官方的蓝牙ble demo了。




3、android ble 概念基础与编码基础

对于ble 的操作api横竖也不多,主要是使用调用api,注册回调函数的方式,在接受到数据时,调用回调函数得到数据。为了代码的独立耗操作,在回调函数中

注册广播的方式,与其它模块或者activity交互。

该帖子对于ble的api介绍很详细:http://www.blogjava.net/zh-weir/archive/2013/12/09/407373.html


 关于Profile概念:

Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部 的Bluetooth规范。为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规范中定义了Profile。Profile定义了设备如何实现一种连接或者应用,你可以把Profile理解为连接层或者应用层协。

在所有的Profile中,有四种是基本的Profile,这些Profile会被其它的Profile使用,它们包括GAP/SDAP/SPP/GOEP Profile。

参考:http://blog.csdn.net/daydayupfromnowon/article/details/6041988


虽然对于协议的一些概念不是开发app时必须要会的,但是多一份了解总是好的,因为profile概念比较难理解,总是让我想到usb协议里,对应的一个产品没必要实现所有的usb协议,每种不同的产品可以枚举成不同的描述符。


4、流程描述。

ble的操作api不多,流程也很清晰,对于通过监听设备接收数据的简单的流程:

a、扫描(有几款手机扫描时间很短,即使设置为手动连接 扫几秒后自动关闭扫描如oppo,)

b、发现设备,匹配建立链接(用device.name 来匹配设备)

c、扫描服务(官方的demo极度坑爹),匹配服务与特征的uuid

 Log.i(TAG,"Attempting to start service discovery:"mBluetoothGatt.discoverServices());

对,你没看错,官方的demo里,扫描发现服务是在log语句里进行的,如果你的代码进行了log混淆,那么你的app能连上设备,但是设备永远也是没有数据回来的

d、监听匹配到的uuid。(如果是读写的话,就读写该uuid,回调函数里会得到值)

注:

 mCharacteristic.getProperties() 可以返回这个特征值是可读,可写,可通知的状态


5、实际中遇到的问题:

android的ble实际中的遇到的问题不少,而且很烦恼的是很多是,设备与ios通信不会出问题,与android通信容易出问题。

实际开发中遇到的现象有:app与设备难链接,链接易断开,数据接收不稳定时快时慢,链接成功没有数据回来。设备端使用的是ti的cc2540 2541开发的

所以现象也是针对这个方案的吧。


注:开发ble常见的两个log错误:129133

GATT_NO_RESOURCES = -128 or 128; 

GATT_INTERNAL_ERROR = -127 or 129; //搜索服务找不到报129

GATT_ERROR = -123 or 133;//连接异常报133

GATT_ALREADY_OPEN = -115 or 141




你可能感兴趣的:(android,ble)