我有一个 .jar 库,正在另一个项目中使用。
Android 13 和 Android 14 之间的某些变化导致了此问题。
在我的库中,我扫描并连接到 BLE 设备。
在从 Android 操作系统回调库期间,我有以下代码:
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
androidBluetoothLog("onConnectionStateChange");
String deviceAddress = gatt.getDevice().getAddress();
if (newState == BluetoothProfile.STATE_CONNECTED) {
removeConnectingDevice(deviceAddress, false);
// start discovering services
gatt.discoverServices();
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
removeConnectingDevice(deviceAddress, false);
gatt.close();
}
}
如您所见,我调用了 gatt.discoverServices();这应该枚举服务和特征,然后调用 onServicesDiscovered 回调。
我的 onServicesDiscovered 看起来像这样:
@Override
// New services discovered
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
androidBluetoothLog("Services Discovered");
List<BluetoothGattService> services = gatt.getServices();
if (services != null) {
androidBluetoothLog("Service Count: " + services.size());
String deviceAddress = gatt.getDevice().getAddress();
for (BluetoothGattService service : services) {
List<BluetoothGattCharacteristic> characteristics = service.getCharacteristics();
for (BluetoothGattCharacteristic characteristic : characteristics) {
androidBluetoothLog("Characteristic found");
}
}
}
} else {
androidBluetoothLog("Error~Service Discovery " + status);
}
}
在 Android 13 上运行时,一切正常。服务计数 > 0,我可以枚举所有服务和特征。
当我在 Android 14 上运行完全相同的代码时,服务计数始终为 0。
我尝试过使用睡眠在这里或那里添加延迟,但似乎没有任何效果。
Android 13 和 Android 14 之间的哪些变化可能导致此问题?
我在flutter应用程序中遇到了同样的问题iOS工作正常,在android 14中设备已连接但未发现服务我尝试了不同的方法,例如延迟,增加MTU 517等..但没有任何工作最终解决方案是在设备连接后手动创建债券。它有效!!
我正在使用 flutter_blue_plus v1.32.11
await device.createBond();