C# Xamarin/Android和可怕的蓝牙LE错误133(GATT_错误)

C# Xamarin/Android和可怕的蓝牙LE错误133(GATT_错误),c#,android,xamarin,bluetooth,C#,Android,Xamarin,Bluetooth,我正在尝试编写一个跨平台的Xamarin表单应用程序(用C#)来与蓝牙设备进行通信。我已经下载了几个软件包(Plugin.BLE和Acr.BLE),但两个都不起作用(它们都可以扫描,但无法连接),所以我想我应该尝试直接使用Android API,看看这是否能帮助我了解失败之处。顺便说一句,我在运行安卓6.0.1版的Nexus7平板电脑上运行 我正在成功扫描设备: BluetoothManager bluetoothManager = (BluetoothManager)Forms.Context

我正在尝试编写一个跨平台的Xamarin表单应用程序(用C#)来与蓝牙设备进行通信。我已经下载了几个软件包(Plugin.BLE和Acr.BLE),但两个都不起作用(它们都可以扫描,但无法连接),所以我想我应该尝试直接使用Android API,看看这是否能帮助我了解失败之处。顺便说一句,我在运行安卓6.0.1版的Nexus7平板电脑上运行

我正在成功扫描设备:

BluetoothManager bluetoothManager = (BluetoothManager)Forms.Context.GetSystemService (Android.Content.Context.BluetoothService);
m_adapter = bluetoothManager.Adapter;
if ((m_adapter == null) || (!m_adapter.IsEnabled))
    return false;
m_scanCallback = new BlueCallback (this);
m_adapter.BluetoothLeScanner.StartScan (m_scanCallback);
我看到了我想与之交谈的设备(在本例中,TI开发板MSP-EXP430F5438处于服务器模式,运行SPPLE演示应用程序)。所以我停止扫描:

m_adapter.BluetoothLeScanner.StopScan (m_scanCallback);
然后我连接到所需的设备:

m_gattCallback = new BlueGattCallback ();
m_gatt = m_selectedDevice.ConnectGatt (Forms.Context, false, m_gattCallback);
我很快就接到一个电话,说连接失败了:

BlueGattCallback.OnConnectionStateChange(gatt, status=133, newState=Disconnected)
我在我的回调中读到,我尝试在回调中直接调用Connect():

if ( ((int)status == 133) && (numRetries < 10) )
{
    numRetries++;
    bool connect = gatt.Connect ();
    Debug.WriteLine ("   gatt.Connect() returned " + connect);
}
if(((int)status==133)和&(numRetries<10))
{
numRetries++;
boolconnect=gatt.connect();
Debug.WriteLine(“gatt.Connect()返回“+Connect”);
}
此代码失败,错误133重复出现,且速度相当快(所有10次重试大约需要3秒钟)


知道这里出了什么问题吗?

因为这取决于每个供应商开发的BLE堆栈, 三星设备上的错误通常比任何其他类型的设备都多,安卓6是最不稳定的

因此,对于任何遇到133错误并因此而有许多不眠之夜的人来说。我建议使用 但是,您需要自己包装库,以便在C#中使用。 它抽象了BLE的许多不稳定部分,并提供了良好的重试机制以及在某些情况下的优雅降级


但最终这并不能解决所有问题,您需要自己处理一些不稳定性。

p.s.据我所知,我没有做任何线程,所有这些都是在主UI线程中发生的。p.p.s。我刚刚检查了一下,我的回调发生在一个线程中,所以我将代码改为使用Device.BeginInvokeOnMainThread()在我的主UI线程中调用gatt.Connect(),但它没有任何帮助。p、 p.p.s.Acr.Ble插件在iOS上正常工作,因此这是Android独有的问题。我们在注释4和G4上也试过了,结果完全一样。我有同样的问题。我面临着同样的问题:-(你找到解决方案了吗?