Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关闭手机蓝牙,再次开启蓝牙后,重新连接成功后回调中bleDevice对象下的BluetoothDevice 对象为空 #559

Open
zhicong666 opened this issue Sep 30, 2022 · 7 comments

Comments

@zhicong666
Copy link

1、搜索蓝牙后得到的蓝牙对象,在关闭手机蓝牙后,所有已搜索的蓝牙bleDevice下的BluetoothDevice 会变成空
2、关闭手机蓝牙,再次开启蓝牙后,重新连接成功后回调中bleDevice对象下的BluetoothDevice 对象为空
3、正常远距离断开重连是正常的

希望方便的时候帮忙分析一下原因

///


///蓝牙连接
///

///蓝牙设备
fun connect(bleDevice: BleDevice) {
BleManager.getInstance().connect(bleDevice, object : BleGattCallback() {
override fun onStartConnect() {
println("---------------> onStartConnect")
}

        override fun onConnectFail(bleDevice: BleDevice, exception: BleException) {

        }

        override fun onConnectSuccess(
            bleDevice: BleDevice,
            gatt: BluetoothGatt,
            status: Int
        ) {
            // bleDevice.device 对象为空
        }

        override fun onDisConnected(
            isActiveDisConnected: Boolean,
            bleDevice: BleDevice,
            gatt: BluetoothGatt,
            status: Int
        ) {

        }
    })
}
@Wheats
Copy link

Wheats commented Oct 17, 2022

这个bug同样遇到,

解决方法:

1:在打开蓝牙的时候,要么等待蓝牙自动搜索附近设备 这个时间一般在(500ms-1200ms)可以完成。看手机系统

2:打开蓝牙后,手动调用搜索接口,重新装载蓝牙

问题出在,扫描设备到mac地址,到时mac映射成BluetoothDevice信息,mScan。需要时间,

测试过,关闭后直接连接,有mac信息,但是name为null。等待1-2秒装载后,在连接,mac 跟 name 就有值了,

@new-soul
Copy link

还是重新scan再连接比较保险,这样是可以正常。

@Wheats
Copy link

Wheats commented Nov 19, 2023 via email

@randyJok
Copy link

关闭蓝牙,并重新打开后,会有部分Android机型出现,旧的已经连接的BleDevice.getName()为null,但实际存储在MultipleBluetoothController哈希表中的BleBluetooth依然没变
因此,当我们重新扫描蓝牙,扫描到新的设备进行连接时,实际上并没有更新在MultipleBluetoothController的哈希表中的BleBluetooth, 依然是使用断开蓝牙前的BleBluetooth, 所以会出现name为null,但是连接又成功的情况
目前我的解决办法是,将BleDevice中的getKey()方法进行修改,去掉名字前缀,以mac地址为准,即可解决

@randyJok
Copy link

1551703036554_ pic

@Wheats
Copy link

Wheats commented Dec 21, 2023 via email

@randyJok
Copy link

重新扫描后,会出现一个新的问题,经过验证,在三星和google的手机上,当关闭蓝牙时,对于已经连接过的设备,removeBleBluetooth()方法并不会调用,但是国产机基本都会调用。这就会导致扫描到设备进行重新连接时,会出现连接成功,但是setMtu和发现服务会失败的情况。
所以一旦手动关闭蓝牙,需要在蓝牙关闭的通知里面,将BleBluetooth移除掉。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants