在 Xamarin Forms 中,与 BLE GATT 连接后,有时会出现异常“GattCallback 错误:133”,导致连接断开。

7
我正在Xamarin Forms中实现BLE。我能够执行所有BLE操作,包括读取、写入和通知。但有时设备在连接后会断开连接。这是我收到的异常信息:

Plugin.BLE.Abstractions.Exceptions.DeviceConnectionException: 'GattCallback error: 133'

以下是我的连接代码:
 private async Task ScanForDevices(ScanData scanData)
        {
            
            _adapter = CrossBluetoothLE.Current.Adapter;
            _adapter.ScanMode = ScanMode.LowLatency;
            Device.BeginInvokeOnMainThread(async () =>
            {
                _adapter.DeviceDiscovered += async (s, a) =>
            {
                NativeDeviceAdd = DependencyService.Get<INativeDevice>().ConvertToNative(a.Device);
                PropertyInfo propInfo = NativeDeviceAdd.GetType().GetProperty("Name");
                BleDeviceName = (string)propInfo.GetValue(NativeDeviceAdd, null);
               
                string substr = scanData.blename;
                if (BleDeviceName == substr)
                {
                  
                     _device = a.Device;
                   
                   await _adapter.StopScanningForDevicesAsync();
                   await ConnectForDevice(_characteristicsBLE);

                }
            };
            });
            await _adapter.StartScanningForDevicesAsync();
        }


       
        private async Task ConnectForDevice(ICharacteristic characteristics)
        {
           
            await _adapter.ConnectToDeviceAsync(_device);
        }

这些是日志。

01-08 17:31:50.435 D/BluetoothManager(26670): getConnectionState()
01-08 17:31:50.435 D/BluetoothManager(26670): getConnectedDevices
01-08 17:31:50.439 D/BluetoothGatt(26670): connect() - device: 34:C9:F0:8D:F4:57, auto: false
01-08 17:31:50.439 D/BluetoothGatt(26670): registerApp()
01-08 17:31:50.439 D/BluetoothGatt(26670): registerApp() - UUID=84c84faa-46ff-4e02-9f9a-f8d14fed8ed0
01-08 17:31:50.441 D/BluetoothGatt(26670): onClientRegistered() - status=0 clientIf=13
01-08 17:31:51.587 D/BluetoothGatt(26670): onClientConnectionState() - status=133 clientIf=13 device=34:C9:F0:8D:F4:57
01-08 17:31:51.594 D/BluetoothGatt(26670): onClientConnectionState() - status=133 clientIf=12 device=34:C9:F0:8D:F4:57
Thread started:  #10
Thread started:  #11
01-08 17:31:51.680 D/BluetoothGatt(26670): close()
01-08 17:31:51.680 D/BluetoothGatt(26670): close()
01-08 17:31:51.680 D/BluetoothGatt(26670): unregisterApp() - mClientIf=12
01-08 17:31:51.680 D/BluetoothGatt(26670): unregisterApp() - mClientIf=13
**Plugin.BLE.Abstractions.Exceptions.DeviceConnectionException:** 'GattCallback error: 133'

我从Xamarin方面没有得到任何解决方案。有什么建议吗?
2个回答

8

133错误很常见,通常与硬件/堆栈有关,尤其是在Android上。目前还没有明确定义的解决方法(就我所知),但已经提到了一些解决方法,包括尝试静默重新连接或尝试创建绑定。请查看下面的链接,并搜索“133”以获取有关解决方法的更多信息:

其他用户尝试过的一些参考资料:


0

我通过像这样指定传输类型到ConnectToDeviceAsync方法来解决它:

var parameters = new ConnectParameters(forceBleTransport: true);
await _adapter.ConnectToDeviceAsync(deviceToConnect, parameters, cancellationToken.Token);

有时候我仍然会遇到这个问题,所以我在应用商店中检查了BLE Explorer应用程序,发现问题出在广告者身上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接