[英]Cannot read BLE Characterstic from Android
請注意,我正在使用Xamarin開發跨平台應用程序。 對於藍牙,我必須開發特定於平台的軟件,因此以下代碼是android庫的一部分,但均使用C#編碼,因為這是xamarin的語言。 即使您不了解C#或Xamarin,也相對容易理解。
我的問題與此非常相似,不同之處在於,我可以完全確定自己具有閱讀權限,因為它確實可以在iOS上運行。
我使用BLE心率監測器。 我連接到它,然后設置有關心率特征的通知,然后閱讀它。 在iOS上,此功能完全正常。 從android但是它告訴我我沒有閱讀特征的權限。 這顯然是錯誤的,因為它可以在iOS上運行。 這可能是什么原因? 連接到設備后是否可能需要重新加載權限? 我沒有為此找到功能。
這是我用來連接設備的代碼。
bleGatt = device.ConnectGatt(Android.App.Application.Context, false, new MyGattCallback(this));
然后在連接狀態更改后,我開始服務發現。 handleConnectionSuccess()
和handleDisconnect()
返回到UI,以向用戶顯示進度。
public override void OnConnectionStateChange(BluetoothGatt gatt,
[GeneratedEnum] GattStatus status, [GeneratedEnum] ProfileState newState)
{
switch(newState)
{
case ProfileState.Connected:
reference.handleConnectionSuccess();
gatt.DiscoverServices();
break;
case ProfileState.Disconnected:
reference.handleDisconnect();
break;
}
}
public override void OnServicesDiscovered(BluetoothGatt gatt, [GeneratedEnum] GattStatus status)
{
if (status == GattStatus.Success) {
BluetoothGattService service = bleGatt.GetService(UUID.FromString("CDEACB80-5235-4C07-8846-93A37EE6B86D"));
if (service == null)
return;
BluetoothGattCharacteristic characteristic = service.GetCharacteristic(UUID.FromString("CDEACB80-5235-4C07-8846-93A37EE6B86D"));
bleGatt.SetCharacteristicNotification(characteristic, true);
bool readable = ((characteristic.Permissions & GattPermission.Read) != 0);
Debug.WriteLine("Characteristic is readable: " + readable + " Permissions: " + characteristic.Permissions);
} else
Debug.WriteLine("Service Discovery ended with not success status: " + status);
}
}
在這里,我總是得到輸出: Characteristic is readable: False Permissions: 0
稍后在gatt.ReadCharacteristic()
返回false,根據android的消息來源,這是因為我沒有讀取權限。 (請參閱所引用的問題 )
原來,甚至以為我不允許從特征讀取值,而無需調用readCharacteristics()
即可自動更新值,而我只需調用getValue()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.