上一篇文章介绍了“蓝牙扫描”,今天来说一下android蓝牙连接过程中133的问题:

我们经常在网上看到一些答案说需要释放gatt资源,这种方式可以在一定程度上减少出现133的概率。个人发现的一个规律是:一般出现蓝牙连接133的问题,大多是android低配机型(虽然上层调用了gatt.close()方法,但手机底层蓝牙服务可能仍与设备保持连接状态,其所占用蓝牙资源不能及时释放,所以导致了我们连接一直出现133的问题)。

这里先说一下常规操作:我们在蓝牙连接失败或者断开连接时,一定要及时的进行gatt.disconnect()和gatt.close()操作;但是在实际的开发过程中,我们可能会进入一种死循环:即如果一旦出现连接133的情况下,如果不断开蓝牙开关一次或设备重新上电一次,可能会一直出现133的情况。这种情况显然不是我们想看到的,所以个人总结出一套亲测有效的方法(此方法无法100%规避出现133的问题,但可以提高出现133情况之后再去连接的成功率),下面看一段刚刚写的一段demo,但实际项目仍会有很有需要优化的地方,仅供参考:

/*** 连接设备(为了给客官们更详尽的展示,所以把很多变量都写在了方法内,实际项目中很多变量不会在方法内初始化)* 入参:设备mac地址* @param mac*/
private  void  connectDevice(final String mac){// 获取蓝牙适配器BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if(bluetoothAdapter == null){Log.d("connectDevice","bluetoothAdapter is null");return;}// 根据mac地址获取蓝牙设备实例对象,当然此处的bluetoothDevice也可以通过蓝牙扫描得到BluetoothDevice bluetoothDevice = bluetoothAdapter.getRemoteDevice(mac);if(bluetoothDevice == null){Log.d("connectDevice","this device is not exist");return;}// 由于今天只讨论蓝牙连接问题,所以这里仅重写了"监测连接状态变化"的方法gattCallback = new BluetoothGattCallback() {@Overridepublic void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {super.onConnectionStateChange(gatt, status, newState);if(status == 0){ //表示gatt服务成功if(newState == BluetoothProfile.STATE_CONNECTED){  // 连接成功状态//连接成功之后的操作}else if(newState == BluetoothProfile.STATE_DISCONNECTED){ // 断开连接状态//断开连接之后的操作}}else {gatt.disconnect();gatt.close();if(status == 133){ //经典错误:133//提示:此处我们可以根据全局的一个flag,去重试连接一次,以增大连接成功率if(!isRetry){isRetry = true;connectDevice(mac);}}}}};// gatt为全局变量,获取当前gatt服务下连接的设备if(gatt != null && gatt.getConnectedDevices() != null){for(BluetoothDevice device:gatt.getConnectedDevices()){if(device.getAddress().equals(mac)){  // 如果当前遍历出的连接设备与我们需要连得设备是同一设备gatt.disconnect(); //先去断开之前未正常断开的连接,解决连接133的问题}}gatt.close(); //释放gatt服务gatt = null;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {gatt = bluetoothDevice.connectGatt(MainActivity.this,false, gattCallback, TRANSPORT_LE);  //} else {gatt = bluetoothDevice.connectGatt(MainActivity.this,false, gattCallback);}
}

关于蓝牙连接的问题先告一段落了,后面有时间会继续分享BluetoothGattCallback内的其他方法的作用。也欢迎大家指正以及提出宝贵的意见,互相进步。谢谢~

android蓝牙连接133问题的解决办法---(连接篇)相关推荐

  1. 【Android教程】Android Studio找不到连接的手机完全解决办法

    Android Studio找不到连接的手机完全解决办法 1.问题背景 现在Android大多都用谷歌的Android Studio来开发 但是 一开始使用Android Studio都不会那么顺利 ...

  2. Linux下数据库连接超时时长,关于.Net Core 部署在Linux下连接SqlServer数据库超时解决办法...

    .Net Core 在 Linux 下连接 SqlServer 需要 SqlServer2008 SP3或以上版本,或SqlServer2012,或SqlServer2014. 如果SqlServer ...

  3. Xamarin中VS无法连接Mac系统的解决办法

    Xamarin中VS无法连接Mac系统的解决办法 按照以下步骤排查: (1)确认Mac系统中安装Xamarin.iOS开发必备的组件,如Mono.Xamarin.iOS. (2)将Windows和Ma ...

  4. xshell突然连接不上虚拟机解决办法

    xshell突然连接不上虚拟机解决办法, 重启网络,三个命令: systemctl stop NetworkManager systemctl disable NetworkManager syste ...

  5. android:windowsoftinputmode=“adjustresize” 无效的解决办法

    1.可能是布局有问题(适当的使用relativelayout,尽量少使用LinearLayout) 程序之前的大致结构如下: [java] view plaincopy <?xml versio ...

  6. Andriod之import android.support.v4或者import android.support.v7提示导入错误解决办法

    问题所在原因:少了v4.jar包 解决办法:给项目添加v4.jar包就行 在使用Eclipse开发andriod程序时,程序中提示import android.support.v4.XXX或者impo ...

  7. 计算机无法识别ipad,ipad连接电脑没反应怎么办 ipad air连接电脑无法识别解决办法...

    ipad.iphone等无法连接电脑,连接不上电脑怎么办?现在就为大家简单那介绍一下,电脑没有识别ipad的解决方法,这些方法对iphone.ipod等苹果设备同样适用. ipad air连接电脑无法 ...

  8. 记录阿里云虚拟主机FTP连接不上的解决办法

    记录阿里云虚拟主机FTP连接不上的解决办法 FTP工具:filezilla 默认设置: 这样是连接不上的 解决办法: 这样就好了 成功截图:

  9. outlook中网址连接打不开解决办法

    outlook网址连接打不开解决办法 今天开会的时候outlook中会议的连接打不开了,上网查了下具体的结局方法.现整理如下: 单击连接的时候outlook提示如下: thisoperation ha ...

最新文章

  1. php true true true,php-为什么此评估为true
  2. CoreText入坑一
  3. 日本社交巨头Line推出BCH交易服务,助力比特币现金蓬勃发展
  4. ol xyz 加载天地图_OpenLayer学习之加载天地图
  5. python类装饰器详解-Python装饰器基础概念与用法详解
  6. MySQL + springboot修改时区的方法小结
  7. EcmaScript正則表達式( 深入淺出系列之淺出 )
  8. 操作系统的msxml组件版本过低_Zabbix 5.0 LTS 版本安装
  9. Jenkins远程命令执行漏洞(CVE-2018-1000861复现)
  10. php 请求header,PHP的curl查看header信息的功能(包括查看返回header和请求header)
  11. Ubuntu18.04 下面安装docker
  12. Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)
  13. 数据库内获取准确的当前时间
  14. 后续:安装ORK功能包踩坑之路和解决方案
  15. laravel框架跨域请求
  16. NSAT-1000 智能天线S参数自动化测试系统
  17. react js清除浏览器缓存
  18. 谷歌表格删除空白表格_带有Google表格的令人印象深刻的仪表板
  19. mysql同张表关联多次查询_MySQL多次单表查询和多表联合查询
  20. 关于移位密码的破解问题

热门文章

  1. 【最新版】多功能萝卜抽奖系统小程序源码
  2. ZMQ之克隆模式的可靠性
  3. 最新自媒体之今日头条(共29节)价值3000元
  4. 全新 QQ Linux 3.0 正式上线
  5. mac终端运行python文件
  6. web前端三大主流框架介绍
  7. async 和 await
  8. Python3 快手视频爬取
  9. 获取当前scn号scn1_Oracle 系统改变号SCN详解
  10. item_search_coupon - 京东优惠券查询接口,京东优惠券查询API接口接入方案