3825|13

25

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

BLE的Android上位机开发(下) [复制链接]

 
HELLO! 大家好!马上就更新下篇了呢~哈哈!(上篇的地址:BLE的Android上位机开发(上))废话不多说了,先上主角吧!代码如下!

  1. private void setBleServiceListener() {
  2.         //Ble服务发现回调
  3.         mBleService.setOnServicesDiscoveredListener(new BleService.OnServicesDiscoveredListener() {
  4.                 @Override
  5.                 public void onServicesDiscovered(BluetoothGatt gatt, int status) {
  6.                         if (status == BluetoothGatt.GATT_SUCCESS) {
  7.                                 List<BluetoothGattService> gattServiceList = gatt.getServices();
  8.                         }
  9.                 }
  10.         });
  11.         //Ble扫描回调
  12.         mBleService.setOnLeScanListener(new BleService.OnLeScanListener() {
  13.                 @Override
  14.                 public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
  15.                         //每当扫描到一个Ble设备时就会返回,(扫描结果重复的库中已处理)
  16.                         Log.w("-","->>扫描到设备:"+device.getName()+">>"+device.getAddress()+">>"+rssi);
  17.                 }
  18.         });
  19.         //Ble连接回调
  20.         mBleService.setOnConnectListener(new BleService.OnConnectionStateChangeListener() {
  21.                 @Override
  22.                 public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
  23.                         //
  24.                 }
  25.         });
  26.         //Ble数据回调
  27.         mBleService.setOnDataAvailableListener(new BleService.OnDataAvailableListener() {
  28.                 @Override
  29.                 public void onCharacteristicChanged(BluetoothGatt _gatt, final BluetoothGattCharacteristic characteristic) {
  30.                         //处理通知返回的数据
  31.         });
  32. }
复制代码

为了便于理解,这几个我分开解释一下吧:

1、mBleService.setOnLeScanListener
这个的作用是,每当Android扫描到一个新的BLE设备,便会触发这个listener。扫描结果重复的库中已处理,这一部分是Blelib里面已经处理好了的,很方便的!
可以通过device.getName()来显示设备名。这个跟gatt_db.h里面CHARACTERISTIC(char_device_name的字段值是一样的哦~
连接这个设备,使用函数:mBleService.connect(device.getAddress());就好了!

2、mBleService.setOnConnectListener
这个回调函数在connect操作之后才会被调用,这里的参数newState,主要有几种类型(灰常重要):
  • STATE_CONNECTED 设备已经连接
  • STATE_CONNECTING 设备正在连接到android
  • STATE_DISCONNECTED 设备已经断开连接
  • STATE_DISCONNECTING 设备正在断开连接

这个newState的判断还是很准确的,已经测试过了,就是反应时间不是很快。。我把41Z复位之后,这个大约需要四五秒的样子才能反应过来。。  不过可以借助这个作断线重连,很不错!

3、mBleService.setOnServicesDiscoveredListener
在设备STATE_CONNECTED 之后,就可以触发ServicesDiscoveredListener了。BLE设备的所有可见services都在gattServiceList 里面,可以通过 service.getUuid()取出每个service的uuid
每个service里面的characteristic可以用service.getCharacteristics();取出,这样就能为每个characteristic执行read write notify操作了。如果我们在41Z里面设置了SendNotification,比如41Z默认的电量,那么当android接收到这个Notification时,就会触发下面要说到的。

4、mBleService.setOnDataAvailableListener
这里重写了onCharacteristicChanged函数,当Notification到达时,就会进入这个onCharacteristicChanged函数。函数里characteristic参数即是对应由哪个characteristic发来的通知,读取这个值的操作是characteristic.getIntValue

最后,附一张手机APP的截图吧~大家不要笑话我哈~~




此内容由EEWORLD论坛网友zwq1489原创,如需转载或用于商业用途需征得作者同意并注明出处


此帖出自NXP MCU论坛

最新回复

大神 有空帮我搞个工程  菜鸟不会搞AS 谢啦  详情 回复 发表于 2017-7-6 08:38
点赞 关注
 

回复
举报

1

帖子

1

TA的资源

一粒金砂(初级)

沙发
 
学习一下 谢谢
此帖出自NXP MCU论坛
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

板凳
 
此帖出自NXP MCU论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

4
 
能否提供最基础的源码给大家参考参考学习 开发
此帖出自NXP MCU论坛

点评

这篇帖子和上一篇(https://bbs.eeworld.com.cn/thread-542533-1-1.html),我都是直接贴的源码呀,这些都是直接复制粘贴就能用的。。  详情 回复 发表于 2017-7-3 14:22
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

5
 
常见泽1 发表于 2017-7-3 08:43
能否提供最基础的源码给大家参考参考学习 开发

这篇帖子和上一篇(https://bbs.eeworld.com.cn/thread-542533-1-1.html),我都是直接贴的源码呀,这些都是直接复制粘贴就能用的。。
此帖出自NXP MCU论坛

点评

工程~~  详情 回复 发表于 2017-7-3 15:31
 
 
 

回复

94

帖子

4

TA的资源

一粒金砂(中级)

6
 
不错,真诚祝贺哈哈
此帖出自NXP MCU论坛

点评

谢谢支持~~  详情 回复 发表于 2017-7-7 12:47
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

7
 
zwq1489 发表于 2017-7-3 14:22
这篇帖子和上一篇(https://bbs.eeworld.com.cn/thread-542533-1-1.html),我都是直接贴的源码呀,这些都 ...

工程~~
此帖出自NXP MCU论坛

点评

源码都在这里了,每个函数的调用说明也在这里,发个工程我觉得意义不大呀,新建个工程谁还不会呢,而且这也不是技术难点呀。你可以把我帖子里提到的代码复制粘贴一下,就可以了!  详情 回复 发表于 2017-7-4 21:40
 
 
 

回复

62

帖子

3

TA的资源

一粒金砂(中级)

8
 
最近也在折磨这个,楼主真是帮了大忙啊!!
此帖出自NXP MCU论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

9
 

源码都在这里了,每个函数的调用说明也在这里,发个工程我觉得意义不大呀,新建个工程谁还不会呢,而且这也不是技术难点呀。你可以把我帖子里提到的代码复制粘贴一下,就可以了!
此帖出自NXP MCU论坛

点评

对于初学者意义很大 没从头开发过android 都是在别人工程上改改 对于大神意义不大  详情 回复 发表于 2017-7-5 08:23
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

10
 
zwq1489 发表于 2017-7-4 21:40
源码都在这里了,每个函数的调用说明也在这里,发个工程我觉得意义不大呀,新建个工程谁还不会呢,而且这 ...

对于初学者意义很大 没从头开发过android 都是在别人工程上改改 对于大神意义不大
此帖出自NXP MCU论坛

点评

现在AS环境新建一个工程,配置直接生成好了,非常方便是不是  详情 回复 发表于 2017-7-5 08:34
 
 
 

回复

94

帖子

4

TA的资源

一粒金砂(中级)

11
 
常见泽1 发表于 2017-7-5 08:23
对于初学者意义很大 没从头开发过android 都是在别人工程上改改 对于大神意义不大

现在AS环境新建一个工程,配置直接生成好了,非常方便是不是
此帖出自NXP MCU论坛

点评

大神 有空帮我搞个工程 菜鸟不会搞AS 谢啦  详情 回复 发表于 2017-7-6 08:38
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

12
 
w562601331 发表于 2017-7-5 08:34
现在AS环境新建一个工程,配置直接生成好了,非常方便是不是

大神 有空帮我搞个工程  菜鸟不会搞AS 谢啦
此帖出自NXP MCU论坛

点评

过两天吧,我提交工程源码。一并提交一个新建的空白androidstudio工程源码,到时你可以下载一下~ 祝开发顺利!  详情 回复 发表于 2017-7-7 12:49
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

13
 
w562601331 发表于 2017-7-3 14:52
不错,真诚祝贺哈哈

谢谢支持~~
此帖出自NXP MCU论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

14
 
常见泽1 发表于 2017-7-6 08:38
大神 有空帮我搞个工程  菜鸟不会搞AS 谢啦

过两天吧,我提交工程源码。一并提交一个新建的空白androidstudio工程源码,到时你可以下载一下~ 祝开发顺利!
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表