最近在研究Ble蓝牙相关的开发,在和蓝牙通信的时候,主动读取消息是ok的,但是就是无法收到蓝牙主动发送出来的消息,而且IOS是可以接收到消息的。这个就比较尴尬了。

通过查阅文档和网上他人的博客找到开启notify功能的代码:

private void setAutoReceiveData(BluetoothGatt gatt) {

try {

BluetoothGattService linkLossService = gatt.getService(SERVICE_UUID);

BluetoothGattCharacteristic data = linkLossService.getCharacteristic(CHARACTERISTIC_UUID);

BluetoothGattDescriptor descriptor = data.getDescriptor(CHARACTERISTIC_UUID);

if (null != descriptor) {

descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);

bluetoothGatt.writeDescriptor(descriptor);

}

bluetoothGatt.setCharacteristicNotification(data, true);

} catch (Exception e) {

BleLogUtils.appendLog("setAutoReceiveData:" + e.getMessage());

}

}

通过serviceId获取到对应的service,并从service中获取到对应的BluetoothGattCharacteristic信息。根据BluetoothGattCharacteristic获取到对应的BluetoothGattDescriptor,但是这里每次获取都是为空的,所以无法进行设置,这样的话Android是无法收到蓝牙发送的消息的。

于是对比目前应用市场上的Ble开发工具,通过其他工具是可以正常接收到蓝牙发送的消息的。

基本上定位到是自己程序的问题后,就开始进行问题调查,知道查到github上一个开源的框架:https://github.com/xiaoyaoyou1212/BLE 通过进入内部源码查看才知道,如果获取不到BluetoothGattDescriptor的时候, 这时候可以通过获取系统默认的BluetoothGattDescriptor,进行蓝牙接口设置。修改后的代码如下:

public static final String CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb";

private void setAutoReceiveData(BluetoothGatt gatt) {

try {

BluetoothGattService linkLossService = gatt.getService(SERVICE_UUID);

BluetoothGattCharacteristic data = linkLossService.getCharacteristic(CHARACTERISTIC_UUID);

BluetoothGattDescriptor defaultDescriptor = data.getDescriptor(UUID.fromString(CLIENT_CHARACTERISTIC_CONFIG));

if (null != defaultDescriptor) {

defaultDescriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);

bluetoothGatt.writeDescriptor(defaultDescriptor);

}

bluetoothGatt.setCharacteristicNotification(data, true);

} catch (Exception e) {

BleLogUtils.appendLog("setAutoReceiveData:" + e.getMessage());

}

}

问题完美解决,这个还是主要对BLE不熟悉导致的。为什么可以从CLIENT_CHARACTERISTIC_CONFIG 中获取到BluetoothGattDescriptor,这个需要后面继续了解,先记录下自己踩过的坑,让别人少踩坑。

android ble notify,Android Ble notify功能踩坑相关推荐

  1. Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏

    Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏 报错日志 排查过程 泄漏原因 解决方案 最近维护一个项目,一个内存泄漏的的原因查了很久,这里记录 ...

  2. Android获取不到运动步数(踩坑)

    Android获取不到运动步数(踩坑) 获取运动步数 某些手机获取不到步数 获取运动步数 使用SensorManager,也就是手机内置的传感器获取运动步数,通过该方法可获取到当前运动步数.开机后总运 ...

  3. 【问题解决】Android JDK版本不匹配导致崩溃踩坑记录

    [问题解决]Android JDK版本不匹配导致崩溃踩坑记录 部分机型反馈崩溃问题 谷歌回复与解决方案 Android打包脱糖操作 对比与排查 总结 前几天同事遇到一个非常诡异的报错,紧急处理后,趁着 ...

  4. Android安卓集成融云推送踩坑

    此文档单单接入推送,暂时没有用IM或其他 如果您觉得可以帮助到您,麻烦帮我点个赞. -------------------------------- 写在前面,为什么要用这个,我并不想,实际接入过程中 ...

  5. zbar android解码错误,Android原生编解码接口 MediaCodec 之——踩坑

    关键帧 MediaCodec 有两种方式触发输出关键帧,一是由配置时设置的 KEY_FRAME_RATE和KEY_I_FRAME_INTERVAL参数自动触发,二是运行过程当中经过 setParame ...

  6. android百度导航demo,Android - 百度导航Demo,我们一起来踩坑!

    Kotlin - 百度导航Demo,我们一起来踩坑! 背景 项目开发中,我们总是离不开定位.地图这些功能,当然有时候有了地图,那么导航就显得很有必要了.现在让我们开启百度导航吧! 第一步:磨刀不误砍柴 ...

  7. 【Unity游戏开发】Android中如何集成Unity3D项目——入门级踩坑

    最近的学习之路真的是波折,先是想学Kotlin,结果赶上了算法比赛,恶补了几天算法,然后回归Kotlin,这周又需要调研一下Unity3D,需要把Unity项目嵌入到我们的Android项目中. 今天 ...

  8. Android集成阿里云旺即时通讯踩坑历程

    下载云旺的demo,将demo中的OneSDK直接拷贝,作为Moudle进行依赖,具体操作就不说了,OneSDK是最新的,一定不要进行修改, 进行依赖后,可能会遇到buildToolsVersion ...

  9. 微信分享功能踩坑过程

    最近,做一款应用的分享功能,主要业务是分享一个网页给微信.QQ好友,然后用的是微信开发平台.腾讯开放平台的官方SDK分享.其中遇到了一些打不开.分享不了的坑,填好后,做了一下封装.总结记录一下. 废话 ...

最新文章

  1. 康托展开式---我排第几+逆康托展开
  2. linux 命令(3)echo
  3. Struts2上传文件的大小设置
  4. jenkins——部署java项目(2)
  5. Selenium爬虫 -- 图片视频的src绝对地址链接分析
  6. DXL之通过程序修改Domino的设计
  7. C++实现堆排序算法
  8. Python基础知识:切片
  9. 计算机网络协议ppt,计算机网络基础——TCP-IP协议.ppt
  10. 3D MAX界面操作教程及渲染技巧
  11. PLC增减计数器示例
  12. 2021全球程序员收入报告,字节跳动年薪274万元排第5!
  13. HIDS入侵检测能力评估list
  14. 赛尔号和赛尔机器人_赛尔号大电影6垃圾星赛尔机器人介绍
  15. 什么力量推动了互联网的进化
  16. [Asp.Net Core]鉴权授权
  17. Python--Opencv:errorFindContours supports only CV_8UC1 images when mode = CV_RETR_FLOODFILL otherw
  18. 环保设备公司网络推广的方法
  19. 如何设计安全可靠的开放接口---对请求参加密保护
  20. LED背光驱动IC 支持32通道 PIN艾瓦特7039,7088

热门文章

  1. Java 将图片转换为素描图
  2. 关于jq工具安装shell脚本
  3. 2022年四川最新消防设施操作员模拟题库及答案
  4. 主流WEB开发语言简单对比
  5. 对称密钥的主密钥解释
  6. Turtlebot4入门教程-软件-软件包安装
  7. 直流电机驱动器能量回收
  8. 量子计算机与人脑接口,首次实现25个量子接口之间量子纠缠 清华刷新纪录
  9. 关于GO+的七个案列分析
  10. Keil官网下载软件开发包并安装