簡體   English   中英

Xamarin / Android和恐懼藍牙LE錯誤133(GATT_ERROR)

[英]Xamarin/Android and the dread Bluetooth LE error 133 (GATT_ERROR)

我正在嘗試編寫一個跨平台的Xamarin Forms應用程序(在C#中)與藍牙LE設備通信。 我已經下載了一些軟件包(Plugin.BLE和Acr.Ble)並且兩者都沒有工作(它們都掃描但不會連接),所以我想我會嘗試直接使用Android API來查看是否有助於我理解什么失敗了。 順便說一句,我正在運行Android版6.0.1的Nexus 7平板電腦上運行。

我正在成功掃描設備:

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);

我看到了我想要與之交談的設備(在這種情況下,在服務器模式下運行其SPPLE演示應用程序的TI開發板MSP-EXP430F5438)。 所以我停止掃描:

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);
}

此代碼以錯誤133重復且非常快速地失敗(所有10次重試大約需要3秒)。

知道這里出了什么問題嗎?

由於這取決於每個供應商開發的BLE堆棧,因此三星設備上的錯誤通常比任何其他類型的設備更多,Android 6是最不穩定的。

所以對於任何因為它而遇到133錯誤並且有許多不眠之夜的人。 我建議使用Sweetblue包裝器,但是你需要自己包裝庫以便在C#中使用。 它抽象了BLE的許多不穩定部分,並提供良好的重試機制以及在某些情況下的優雅降級。

但最終這並沒有解決所有問題,你需要自己處理一些不穩定因素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM