[Help]: Android: `disconnect` says `already disconnected` instead of canceling autoconnect
samnbd opened this issue · 14 comments
Requirements
- I've looked at the README 'Common Problems' section
Have you checked this problem on the example app?
Yes
FlutterBluePlus Version
1.32.12
Flutter Version
3.22.3
What OS?
Android
OS Version
13
Bluetooth Module
BLE watch
What is your problem?
The issue reported previously here was marked as resolved but I still have the same issue on the latest plugin version 1.32.12
Note that this issue happens when trying to connect a device after disconnecting it.
Logs
D/BluetoothGatt(27345): connect() - device: CA:26:03:F6:2E:90, auto: true
D/BluetoothGatt(27345): registerApp()
D/BluetoothGatt(27345): registerApp() - UUID=1e39eef6-9cce-466d-bbb6-be3308119f24
D/BluetoothGatt(27345): onClientRegistered() - status=0 clientIf=8
I/flutter (27345): [FBP] <connect> result: true
12
E/gralloc4(27345): Empty SMPTE 2094-40 data
D/TrafficStats(27345): tagSocket(313) with statsTag=0xffffffff, statsUid=-1
47
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] <disconnect> args:
D/[FBP-Android](27345): [FBP] onMethodCall: disconnect
D/[FBP-Android](27345): [FBP] already disconnected
I/flutter (27345): [FBP] <disconnect> result: false
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] <connect> args: {remote_id: CA:26:03:F6:2E:90, auto_connect: 1}
D/[FBP-Android](27345): [FBP] onMethodCall: connect
D/[FBP-Android](27345): [FBP] already connecting
I/flutter (27345): [FBP] <connect> result: true
21
E/gralloc4(27345): Empty SMPTE 2094-40 data
D/BluetoothGatt(27345): onClientConnectionState() - status=0 clientIf=8 device=CA:26:03:F6:2E:90
D/[FBP-Android](27345): [FBP] onConnectionStateChange:connected
D/[FBP-Android](27345): [FBP] status: SUCCESS
I/flutter (27345): [FBP] [[ OnConnectionStateChanged ]] result: {disconnect_reason_code: 0, disconnect_reason_string: SUCCESS, remote_id: CA:26:03:F6:2E:90, connection_state: 1}
31
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] <discoverServices> args: CA:26:03:F6:2E:90
D/[FBP-Android](27345): [FBP] onMethodCall: discoverServices
D/BluetoothGatt(27345): discoverServices() - device: CA:26:03:F6:2E:90
D/BluetoothGatt(27345): onSearchComplete() = Device=CA:26:03:F6:2E:90 Status=0
D/[FBP-Android](27345): [FBP] onServicesDiscovered:
D/[FBP-Android](27345): [FBP] count: 11
D/[FBP-Android](27345): [FBP] status: 0GATT_SUCCESS
I/flutter (27345): [FBP] <discoverServices> result: true
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] [[ OnDiscoveredServices ]] result: {error_string: GATT_SUCCESS, success: 1, remote_id: CA:26:03:F6:2E:90, error_code: 0, services: [{included_services: [], characteristics: [{descriptors: [], service_uuid: 1800, remote_id: CA:26:03:F6:2E:90, characteristic_uuid: 2a00, properties: {broadcast: 0, write_without_response: 0, notify_encryption_required: 0, read: 1, authenticated_signed_writes: 0, extended_properties: 0, indicate: 0, indicate_encryption_required: 0, write: 0, notify: 0}}, {descriptors: [], service_uuid: 1800, remote_id: CA:26:03:F6:2E:90, characteristic_uuid: 2a01, properties: {broadcast: 0, write_without_response: 0, notify_encryption_required: 0, read: 1, authenticated_signed_writes: 0, extended_properties: 0, indicate: 0, indicate_encryption_required: 0, write: 0, notify: 0}}, {descriptors: [], service_uuid: 1800, remote_id: CA:26:03:F6:2E:90, characteristic_uuid: 2a04, properties: {broadcast: 0, write_without_response: 0, notify_encryption_required: 0, read: 1, authenticated_signed_write
I/flutter (27345): [FBP] <setNotifyValue> args: {remote_id: CA:26:03:F6:2E:90, service_uuid: 1801, secondary_service_uuid: null, characteristic_uuid: 2a05, force_indications: false, enable: true}
D/[FBP-Android](27345): [FBP] onMethodCall: setNotifyValue
D/BluetoothGatt(27345): setCharacteristicNotification() - uuid: 00002a05-0000-1000-8000-00805f9b34fb enable: true
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] <setNotifyValue> result: true
2
E/gralloc4(27345): Empty SMPTE 2094-40 data
D/[FBP-Android](27345): [FBP] onDescriptorWrite:
D/[FBP-Android](27345): [FBP] chr: 2a05
D/[FBP-Android](27345): [FBP] desc: 2902
D/[FBP-Android](27345): [FBP] status: GATT_SUCCESS (0)
I/flutter (27345): [FBP] [[ OnDescriptorWritten ]] result: {error_string: GATT_SUCCESS, service_uuid: 1801, success: 1, remote_id: CA:26:03:F6:2E:90, descriptor_uuid: 2902, error_code: 0, characteristic_uuid: 2a05, value: 0200}
I/flutter (27345): [FBP] <readCharacteristic> args: {remote_id: CA:26:03:F6:2E:90, service_uuid: 180a, secondary_service_uuid: null, characteristic_uuid: 2a26}
D/[FBP-Android](27345): [FBP] onMethodCall: readCharacteristic
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] <readCharacteristic> result: true
2
E/gralloc4(27345): Empty SMPTE 2094-40 data
D/[FBP-Android](27345): [FBP] onCharacteristicRead:
D/[FBP-Android](27345): [FBP] chr: 2a26
D/[FBP-Android](27345): [FBP] status: GATT_SUCCESS (0)
I/flutter (27345): [FBP] [[ OnCharacteristicReceived ]] result: {error_string: GATT_SUCCESS, service_uuid: 180a, success: 1, remote_id: CA:26:03:F6:2E:90, error_code: 0, characteristic_uuid: 2a26, value: 362e31302e30}
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] <writeCharacteristic> args: {remote_id: CA:26:03:F6:2E:90, service_uuid: 156e7000-a300-4fea-897b-86f698d74461, secondary_service_uuid: null, characteristic_uuid: 7001, write_type: 0, allow_long_write: 0, value: 120d0000000000}
D/[FBP-Android](27345): [FBP] onMethodCall: writeCharacteristic
I/flutter (27345): [FBP] <writeCharacteristic> result: true
7
E/gralloc4(27345): Empty SMPTE 2094-40 data
D/[FBP-Android](27345): [FBP] onCharacteristicWrite:
D/[FBP-Android](27345): [FBP] chr: 7001
D/[FBP-Android](27345): [FBP] status: GATT_SUCCESS (0)
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] [[ OnCharacteristicWritten ]] result: {error_string: GATT_SUCCESS, service_uuid: 156e7000-a300-4fea-897b-86f698d74461, success: 1, remote_id: CA:26:03:F6:2E:90, error_code: 0, characteristic_uuid: 7001, value: 120d0000000000}
I/flutter (27345): [FBP] <writeCharacteristic> args: {remote_id: CA:26:03:F6:2E:90, service_uuid: 156e1000-a300-4fea-897b-86f698d74461, secondary_service_uuid: null, characteristic_uuid: 1005, write_type: 0, allow_long_write: 0, value: 3052221002092404}
D/[FBP-Android](27345): [FBP] onMethodCall: writeCharacteristic
I/flutter (27345): [FBP] <writeCharacteristic> result: true
2
E/gralloc4(27345): Empty SMPTE 2094-40 data
Note in this case, the pairing stream emits 2 disconnected states before it emits connected state when trying to connect to the device
this is not the same issue.
in your logs, it looks like you are calling
- connect(autoconnect: true)
- disconnect
- connect(autoconnect: true)
is that right?
so I dont understand. What do you expect to happen?
Note in this case, the pairing stream emits 2 disconnected states before it emits connected state when trying to connect to the device
I dont see this in your logs
please include the full logs.
I'm not calling any disconnect from my end
Also, I don't know why did you change the title ?! It's exactly the same issue that is happening in the issue that was marked as resolved here
Note in this case, the pairing stream emits 2 disconnected states before it emits connected state when trying to connect to the device
I dont see this in your logs
it's visible in the logs:
I/flutter (27345): [FBP] <disconnect> args:
D/[FBP-Android](27345): [FBP] onMethodCall: disconnect //first disconnect, this wasn't called by me
D/[FBP-Android](27345): [FBP] already disconnected //second call of disconnect, this also isn't called by me
I/flutter (27345): [FBP] <disconnect> result: false
E/gralloc4(27345): Empty SMPTE 2094-40 data
I/flutter (27345): [FBP] <connect> args: {remote_id: CA:26:03:F6:2E:90, auto_connect: 1}
I'm not calling any disconnect from my end
D/[FBP-Android](27345): [FBP] onMethodCall: disconnect
you call it right here
Note in this case, the pairing stream emits 2 disconnected states before it emits connected state when trying to connect to the device
I dont see this in your logs
it's visible in the logs:
I/flutter (27345): [FBP] <disconnect> args: D/[FBP-Android](27345): [FBP] onMethodCall: disconnect //first disconnect, this wasn't called by me D/[FBP-Android](27345): [FBP] already disconnected //second call of disconnect, this also isn't called by me I/flutter (27345): [FBP] <disconnect> result: false
you are misinterpreting the logs. this is a single call
Also, I don't know why did you change the title ?! It's exactly the same issue that is happening in the issue that was marked as resolved here
its a different issue. his had this log:
D/[FBP-Android](30007): [FBP] disconnect: cancelling connection in progress
yours does not.
As I mentioned before, I'm not calling disconnect at all, it's being emitted by the plugin without me calling it
prove it :)
maybe you're hitting this code, the connection timeout
BmConnectionStateResponse response = await futureState
.fbpEnsureAdapterIsOn("connect")
.fbpTimeout(timeout.inSeconds, "connect")
.catchError((e) async {
if (e is FlutterBluePlusException && e.code == FbpErrorCode.timeout.index) {
await FlutterBluePlus._invokeMethod('disconnect', remoteId.str); // cancel connection attempt
}
throw e;
});
but that is only called when autoconnect is false.
closing. nothing I can do without more data from OP.