开发Ble(公司项目,防丢器)已经有一段时间,由于是第一次接触Ble而网上资料又不多,且android平台自身的差异性,遇到了很多问题。为了将来方便查阅,在此做下记录。
1.中兴手机,蓝牙手动断开后,无法再次链接问题。(可能别的手机也存在类似问题)
解决办法: 在连接gatt之前,对bluetoothadapter进行一次scan 顺利解决此问题。

2.Gatt链接不稳定(在部分手机上出现过,此问题先排除硬件问题。此处只针对自己遇到的情况,或许有别的方案,待补充)
解决办法: 由于用到了gattserver,在启动gattserver和连接gatt之间由于未做顺序的限制,导致了此问题。经过反复调试后,发现只需要先创建gattserver,在serviceadded之后,在去进行gatt链接,此时的gatt连接会比较稳定。

3.小米手机遇到的,在gatt连接之后,手动调用gatt.disconnect  和 close。第二次链接后 自动断开,再次连接会重新绑定。
解决办法:也是无意中,看到一篇文章,写的是小米手机在gatt操作的时候 ,最好要做一下sleep操作,可能是因为小米底层对蓝牙的某些东西没有来得及释放(自己猜测)。 于是在gatt 连接上时,在gatt.discoverServices 之前,加上 sleep(500) ,发现断开后在连接 成功率大大提高。

2014-11-14
4.蓝牙关闭和打开变得异常缓慢,甚至崩溃
此问题可能与当蓝牙关闭时,尚有为关闭的 gatt连接/gattserver。我的解决办法是,注册蓝牙状态的监听,当发现蓝牙状态变为BluetoothAdapter.STATE_TURNING_OFF 时,立刻释放所有的gatt连接,关闭gattserver。经不完全测试发现,蓝牙的关闭速度变得快多了。

5.当批量连接蓝牙时,不进行onConnectionStateChange 回调。
这个问题是自己 闲的蛋疼,在测试的时候,用了很多假的mac 地址。于是造成的后果可想而知,肯定的是连不上的。但是同时也发现了问题,当ble去连接一个不存在的mac,或者不在范围内的mac地址时,发现有时候 不会进行onConnectionStateChange的回调,觉得很蛋疼。个人觉得会不会是因为 ,同时发送的connectGatt 请求太多,导致了系统的蓝牙阻塞或者别的什么问题。没办法,既然发现了这个问题,就只好动手解决了。  首先,我在批量连接connectGatt的时候,新增了一个扫描,只有当 要连接的 设备扫描到了,才进行连接。然后,我还对gatt的连接,做了一个同步(每次只能进行一个连接,上一个连接不结束的话,无法开始上一个连接,同时针对连接无回调的情况做了超时处理,超时的话立马释放当前连接)。 这么说可能感受不是很直观。但个人觉得,在操作手机蓝牙的时候,还是做个同步的好。 避免同时发生多个gatt的操作,倒是手机蓝牙奔溃等情况的发生。

2014-11-266.Gatt链接不稳定 二
最近因为在保存gatt连接状态的serveice中,增加了一个后台的lescan,突然发现gatt连接又变的不稳定了,不知道什么原因。走投无路的情况下,把后台的lescan放到另一个service中进行,发现好像gatt又变得稳定多了,目前测试下来 已经连了40分钟没有断开了。 不知道接下去会咋样。  也不知道是不是因为在同一个线程中在gatt连接成功后,开启lescan会导致连接不稳定,或亦是手机本身的原因,希望高人指教。

2014-11-27
还是上面的问题,今天早上来,又重试了后台扫描和gatt连接,发现又有两次断开,诶。。。。 郁闷,求高人指教了。

以上发现的问题,均为个人开发经验所得,如有不妥或者欠缺错误的地方,请大家指正批评。

坑爹的Android Ble 问题记录日志的更多相关文章

  1. Android BLE 蓝牙低功耗教程,中央BluetoothGatt和周边BluetoothGattServer的实现

    http://blog.csdn.net/wave_1102/article/details/39271693 分类: Android(105) 作者同类文章X Android4.3 规范了BLE的A ...

  2. 蓝牙4.0——Android BLE开发官方文档翻译

    ble4.0开发整理资料_百度文库 http://wenku.baidu.com/link?url=ZYix8_obOT37JUQyFv-t9Y0Sv7SPCIfmc5QwjW-aifxA8WJ4iW ...

  3. 【转】蓝牙4.0——Android BLE开发官方文档翻译

    原文网址:http://ricardoli.com/2014/07/31/%E8%93%9D%E7%89%9940%E2%80%94%E2%80%94android-ble%E5%BC%80%E5%8 ...

  4. Android ble 蓝牙4.0 总结

    本文介绍Android ble 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用,如果手机系统版本API level < 18,也是用不了蓝牙4.0的哦 ...

  5. Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探

    Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便 ...

  6. Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能

    Android BLE与终端通信(四)--实现服务器与客户端即时通讯功能 前面几篇一直在讲一些基础,其实说实话,蓝牙主要为多的还是一些概念性的东西,当你把概念都熟悉了之后,你会很简单的就可以实现一些逻 ...

  7. Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信

    Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...

  8. Android BLE与终端通信(二)——Android Bluetooth基础科普以及搜索蓝牙设备显示列表

    Android BLE与终端通信(二)--Android Bluetooth基础搜索蓝牙设备显示列表 摘要 第一篇算是个热身,这一片开始来写些硬菜了,这篇就是实际和蓝牙打交道了,所以要用到真机调试哟, ...

  9. Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址

    Android BLE与终端通信(一)--Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址 Hello,工作需要,也必须开始向BLE方向学习了,公司的核心技术就是BLE终端 ...

随机推荐

  1. CentOS 6.7 安装配置BT下载工具Transmission

    1.配置额外yum源 i386 cd /etc/yum.repos.d/ wget http://geekery.altervista.org/geekery-el6-i686.repo x86_64 ...

  2. mysql select 语法

    格式:select [选项子句] 字段表达式子句 [from子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句]; 提示:子句的顺序 ...

  3. 查询语句,按照时间排序,取前N条

    mysql: SELECT * from  (SELECT H_TEMPERATURE,TH_TIME FROM wenshidu  WHERE TH_TIME <= STR_TO_DATE(' ...

  4. SqlServer循环读取配置

    USE [DB_JP_BaseInfo00] GO /****** Object: StoredProcedure [dbo].[sp_wx_getAppointmentInfo_Str] Scrip ...

  5. 手机端的表单验证和PC端的不同

    1.手机端:由于页面小的局限性,表单验证从上到下依次进行,如果上一个验证不通过,则给出错误提示,代码中return回去,不必进行下一个的校验: 2.PC端:页面范围大,一般是在表单的后面或者下面,提示 ...

  6. C#结构内存布局介绍

    转载:http://www.csharpwin.com/csharpspace/10455r2800.shtml 本来打算写一篇文章,详细地讨论一下结构的内存布局,但是想了下,跟路西菲尔的这篇文章也差 ...

  7. RABBITMQ安装注意点

    关于 RABBITMQ的配置问题安装问题windows7 和window 10我都试了windows10安装和配置不要出现中文和空格,不然你日寒飞的心都有了ERLANG的安装也是Win7直接默认的路径 ...

  8. Java线程:新特征-线程池

    Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序 ...

  9. 深入理解shared pool共享池之library cache系列一

    结论 1,oradebug dump library_cache不同级别dump的library cache内容及粒度会有所区别,具体见测试开始部分2,本文测示基于oradebug dump libr ...

  10. (四)值栈与OGNL

    所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:值栈简介 值栈是对应每个请求对象的一套内存数据的封装,Struts2 会 ...