29812|11

9812

帖子

24

TA的资源

版主

楼主
 

android中重复连接ble设备导致的连接后直接返回STATE_DISCONNECTED的解决办法 [复制链接]

                        /*
                         * 通过使用if(gatt==null)来判断gatt是否被创建过,如果创建过就使用gatt.connect();重新建立连接。
                         * 但是在这种情况下测试的结果是重新连接需要花费很长的时间。
                         * 解决办法是通过gatt = device.connectGatt(this, false, gattCallback);建立一个新的连接对象,很明显这样的速度要比上一种方法快很多
                         * 然而,多次创建gatt连接对象的直接结果是创建过6个以上gatt后就会再也连接不上任何设备,原因应该是android中对BLE限制了同时连接的数量为6个
                         * 解决办法是在每一次重新连接时都执行一次gatt.close();关闭上一个连接。
                         * 有人说为什么不在gatt.disconnect();后加一条gatt.close();呢,原因是如果立即执行gatt.close();会导致gattCallback无法收到STATE_DISCONNECTED的状态。
                         * 当然,最好的办法是在gattCallback收到STATE_DISCONNECTED后再执行gatt.close();,这样逻辑上会更清析一些。
                         */
查看精华帖全部内容,请登录或者注册
此帖出自无线连接论坛

最新回复

楼主大大 求问个问题。ble callback STATE_DISCONNECTED  断开连接  我是直接断电的,但是回调需要20S求解。能不能 快点。  详情 回复 发表于 2016-4-14 09:47

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

2万

帖子

74

TA的资源

管理员

沙发
 
很好的经验分享 谢谢

此帖出自无线连接论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
本帖最后由 huohou 于 2014-11-21 18:16 编辑

我觉得不是close没有执行的原因,当然你的解决方法(在每次connect前,检查是否已经有了Gatt对象,有了的话,就close,然后建立连接重新分配-这个方法)是没错的。真实的原因是每一次连接都会生成一个Gatt对象,每一个Gatt对象都需要断开连接,不然的话,一旦其中有一个Gatt对象没有断开连接,系统就会认为你是在连接的,让你连扫描都扫描不到这个设备,就别说继续连接了。。。。你的方法是正好保证了系统中只有一个Gatt对象,且把真实的(也就是最后的那个)给保存了起来,用于实际操作。而disconnect本身在这个算法里面就可以代替close。close和disconnect的区别在于,close除了断开连接外,还会释放掉所有资源,导致不可以直接在后面的操作中用gatt对象的connect直接连接,而disconnect并不释放资源,所以,所有的资源还保存着,就可以用Gatt的connect进行简单恢复连接,而不是在device那一层进行操作。至于为啥允许可以对一个外设连接多次,这个事情我也很纳闷,不知道什么场景需要这样的操作。。。
此帖出自无线连接论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

4
 
学习了
此帖出自无线连接论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

5
 
为什么要重复链接呢?什么应用场景?
此帖出自无线连接论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主你好,按照您说的这种方式,我修改后还是会出现连接不上的现象,连回调函数都无法进入。
此帖出自无线连接论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
您好,楼主,我在开发的时候也遇到,出现的问题也一样,请问您解决了吗
此帖出自无线连接论坛

点评

这个贴子就是解决办法  详情 回复 发表于 2015-5-28 11:21
 
 
 

回复

9812

帖子

24

TA的资源

版主

8
 
cxlbbs 发表于 2015-5-28 00:26
您好,楼主,我在开发的时候也遇到,出现的问题也一样,请问您解决了吗

这个贴子就是解决办法
此帖出自无线连接论坛
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

9194

帖子

5

TA的资源

管理员

9
 
感谢楼主分享,好东西
此帖出自无线连接论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

122

帖子

2

TA的资源

一粒金砂(中级)

10
 
最近刚好遇上这个问题,回去试试。太感谢了。
此帖出自无线连接论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
楼主大大 求问个问题。ble callback STATE_DISCONNECTED  断开连接  我是直接断电的,但是回调需要20S求解。能不能 快点。
此帖出自无线连接论坛

点评

你使用哪个BLE模块?修改一下模块的连接参数试试  详情 回复 发表于 2016-4-14 09:53
 
 
 

回复

9812

帖子

24

TA的资源

版主

12
 
xubin3060 发表于 2016-4-14 09:47
楼主大大 求问个问题。ble callback STATE_DISCONNECTED  断开连接  我是直接断电的,但是回调需要20S求解 ...

你使用哪个BLE模块?修改一下模块的连接参数试试
此帖出自无线连接论坛
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
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
快速回复 返回顶部 返回列表