Bet*_*ker 5 c# android bluetooth xamarin
我正在尝试编写一个跨平台的 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);
Run Code Online (Sandbox Code Playgroud)
并且我看到了我想与之交谈的设备(在本例中,是处于服务器模式的 TI 开发板 MSP-EXP430F5438,正在运行其 SPPLE 演示应用程序)。所以我停止扫描:
m_adapter.BluetoothLeScanner.StopScan (m_scanCallback);
Run Code Online (Sandbox Code Playgroud)
然后我连接到所需的设备:
m_gattCallback = new BlueGattCallback ();
m_gatt = m_selectedDevice.ConnectGatt (Forms.Context, false, m_gattCallback);
Run Code Online (Sandbox Code Playgroud)
我几乎立即接到回电说连接失败:
BlueGattCallback.OnConnectionStateChange(gatt, status=133, newState=Disconnected)
Run Code Online (Sandbox Code Playgroud)
我阅读了这个谷歌错误报告,所以在我的回调中我尝试直接在我的回调中调用 Connect() :
if ( ((int)status == 133) && (numRetries < 10) )
{
numRetries++;
bool connect = gatt.Connect ();
Debug.WriteLine (" gatt.Connect() returned " + connect);
}
Run Code Online (Sandbox Code Playgroud)
此代码反复失败并返回错误 133 且速度非常快(所有 10 次重试大约需要 3 秒)。
知道这里出了什么问题吗?
| 归档时间: |
|
| 查看次数: |
1062 次 |
| 最近记录: |