欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android蓝牙频繁断、连之后,无法发现蓝牙服务的解决方案

程序员文章站 2022-03-27 21:53:27
android蓝牙频繁断、连之后,某次在发现蓝牙服务的回调结果中,特征值服务列表为Null或者长度为0,BluetoothGattCallback gattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status,int newState) { if (status ==......

android蓝牙频繁断、连之后,某次在连接成功之后去发现蓝牙服务的回调结果中,特征值服务列表为Null或者长度为0,

BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status,int newState) {
            if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) {
                //连接成功之后,去发现蓝牙服务
                gatt.discoverServices();
            }                                
        }
        @Override
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            if(gatt.getServices() == null){
                // do something
            }
            for (BluetoothGattService gattService : gatt.getServices()) {
                  // do something
            }
        }
}


优化方案1:延迟去发现蓝牙服务gatt.discoverServices();  经过验证,不可行,仍然会出现发现不了蓝牙服务的现象;

优化方法2:每次去连接之前,先gatt.close()一下,效果也不明显;

究极方案:当发现蓝牙服务列表为0的情况下,去重新发现蓝牙服务(gatt.discoverServices()) 或者 先断开蓝牙连接,然后再重新调用connect方法(亲测有效)
这里我在某款机型(大概8次出现1次)经过如此优化之后,虽然仍然会出现发现不了蓝牙服务的情况,但是能保证下一次基本上都可以顺利订阅特征值服务成功且建立连接成功;
其他像蓝牙连接133、连接异常、连接超时,其实都可以通过先断开蓝牙连接、再重连 来增大我们连接的成功率(android机型差异较大,此重连方式在一定程度上可以提高连接成功率,提升用户体验)。

如有帮助,记得点赞三连~~

本文地址:https://blog.csdn.net/qq_33539839/article/details/111873381