android ble notify,Android Ble notify功能踩坑
最近在研究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功能踩坑相关推荐
- Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏
Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏 报错日志 排查过程 泄漏原因 解决方案 最近维护一个项目,一个内存泄漏的的原因查了很久,这里记录 ...
- Android获取不到运动步数(踩坑)
Android获取不到运动步数(踩坑) 获取运动步数 某些手机获取不到步数 获取运动步数 使用SensorManager,也就是手机内置的传感器获取运动步数,通过该方法可获取到当前运动步数.开机后总运 ...
- 【问题解决】Android JDK版本不匹配导致崩溃踩坑记录
[问题解决]Android JDK版本不匹配导致崩溃踩坑记录 部分机型反馈崩溃问题 谷歌回复与解决方案 Android打包脱糖操作 对比与排查 总结 前几天同事遇到一个非常诡异的报错,紧急处理后,趁着 ...
- Android安卓集成融云推送踩坑
此文档单单接入推送,暂时没有用IM或其他 如果您觉得可以帮助到您,麻烦帮我点个赞. -------------------------------- 写在前面,为什么要用这个,我并不想,实际接入过程中 ...
- zbar android解码错误,Android原生编解码接口 MediaCodec 之——踩坑
关键帧 MediaCodec 有两种方式触发输出关键帧,一是由配置时设置的 KEY_FRAME_RATE和KEY_I_FRAME_INTERVAL参数自动触发,二是运行过程当中经过 setParame ...
- android百度导航demo,Android - 百度导航Demo,我们一起来踩坑!
Kotlin - 百度导航Demo,我们一起来踩坑! 背景 项目开发中,我们总是离不开定位.地图这些功能,当然有时候有了地图,那么导航就显得很有必要了.现在让我们开启百度导航吧! 第一步:磨刀不误砍柴 ...
- 【Unity游戏开发】Android中如何集成Unity3D项目——入门级踩坑
最近的学习之路真的是波折,先是想学Kotlin,结果赶上了算法比赛,恶补了几天算法,然后回归Kotlin,这周又需要调研一下Unity3D,需要把Unity项目嵌入到我们的Android项目中. 今天 ...
- Android集成阿里云旺即时通讯踩坑历程
下载云旺的demo,将demo中的OneSDK直接拷贝,作为Moudle进行依赖,具体操作就不说了,OneSDK是最新的,一定不要进行修改, 进行依赖后,可能会遇到buildToolsVersion ...
- 微信分享功能踩坑过程
最近,做一款应用的分享功能,主要业务是分享一个网页给微信.QQ好友,然后用的是微信开发平台.腾讯开放平台的官方SDK分享.其中遇到了一些打不开.分享不了的坑,填好后,做了一下封装.总结记录一下. 废话 ...
最新文章
- 康托展开式---我排第几+逆康托展开
- linux 命令(3)echo
- Struts2上传文件的大小设置
- jenkins——部署java项目(2)
- Selenium爬虫 -- 图片视频的src绝对地址链接分析
- DXL之通过程序修改Domino的设计
- C++实现堆排序算法
- Python基础知识:切片
- 计算机网络协议ppt,计算机网络基础——TCP-IP协议.ppt
- 3D MAX界面操作教程及渲染技巧
- PLC增减计数器示例
- 2021全球程序员收入报告,字节跳动年薪274万元排第5!
- HIDS入侵检测能力评估list
- 赛尔号和赛尔机器人_赛尔号大电影6垃圾星赛尔机器人介绍
- 什么力量推动了互联网的进化
- [Asp.Net Core]鉴权授权
- Python--Opencv:errorFindContours supports only CV_8UC1 images when mode = CV_RETR_FLOODFILL otherw
- 环保设备公司网络推广的方法
- 如何设计安全可靠的开放接口---对请求参加密保护
- LED背光驱动IC 支持32通道 PIN艾瓦特7039,7088