c# - 如何修复 GattStatus:3 - BLE Xamarin 表单应用程序的 WriteNotPermitted 异常?
问题描述
我正在开发一个 BLE 应用程序。我能够连接到 MI 频段并通过我的 Xamarin forms BLE 应用程序获得服务。但是,当我尝试编写特征时,我遇到了异常。我得到了例外
特性不支持写入。
对于方法WriteAsync()
。这是我写特征的代码:
private async Task<string> ProcessDeviceInformationService(IService deviceInfoService)
{
try
{
await adapter.ConnectToDeviceAsync(device);
var sb = new StringBuilder("Getting information from Device Information service: \n");
var characteristics = await deviceInfoService.GetCharacteristicsAsync();
var characteristic = await deviceInfoService.GetCharacteristicAsync(Guid.Parse("00002A27-0000-1000-8000-00805F9B34FB"));
// characteristic.CanWrite = true;
//foreach (var characteristic in characteristics)
//{
try
{
// await Task.Delay(300);
var bytes = await characteristic.ReadAsync();
var str = Encoding.UTF8.GetString(bytes, 0, 0);
ManufacturerLabel.Text = str;
//var characteristic = await deviceInfoService.GetCharacteristicAsync(GattCharacteristicIdentifiers.DataExchange);
if (characteristic != null)
{
byte[] senddata = Encoding.UTF8.GetBytes(string.IsNullOrEmpty(SendMessageLabel.Text) ? "jenx.si was here" : SendMessageLabel.Text);
await Task.Delay(300);
var newbytes = await characteristic.WriteAsync(senddata);
var strnew = Encoding.UTF8.GetString(senddata, 0, 0);
ManufacturerLabel.Text = newbytes.ToString();
//var strnew = Encoding.UTF8.GetString(newbytes, 0, 0);
}
// ManufacturerLabel.Text = str;
}
catch (Exception ex)
{
return ex.Message;
}
//}
return sb.ToString();
}
我不知道如何解决这个任何建议?
解决方案
我解决了这个问题。首先,我们需要检查 Characteristic 是否具有写入操作,以便您可以从 Play 商店下载名为BLE 扫描仪的应用程序并连接到该设备。当我们连接到该 BLE 时,我们将能够看到 BLE 外设的可用服务和特性。并且我们需要检查哪些特征具有写操作。因此,如果您尝试为外围设备中没有写操作的特征执行写特征,则会给出异常 write not allowed。
推荐阅读
- python - 使用 5 的倍数作为变量更容易使用模数
- r - 在拆分后如何将两个元素放入 R 中的新两个字符串向量中
- android - 保存 10 个值的最佳实践:Shared Preferences with or without JSONObject?
- google-maps - 如何让 Golang google Maps SDK NearbySearch 从多个页面返回搜索结果
- r - LuaLaTex 和 _output.yml 配置 - 基本格式错误()
- python-3.x - Python对同一类的方法使用多处理
- c# - 拖动时如何将控件保留在其父控件中?
- javascript - 当返回嵌套在 then 块中的承诺时,使用 map for Promise.all 返回未定义数组
- c# - 返回带有批处理响应的 HttpResponseMessage
- html - Typescript:从返回不稳定结果的 HTML 中获取 id 元素