安卓手机频繁连接蓝牙后无法连接问题

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机型差异较大,此重连方式在一定程度上可以提高连接成功率,提升用户体验)。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫邪博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值