#c# #xamarin.forms #bluetooth-lowenergy #bluetooth-gatt
#c# #xamarin.forms #bluetooth-низкое энергопотребление #bluetooth-gatt
Вопрос:
Я работаю над приложением BLE. Я могу подключиться к MI band и получать сервисы через мое приложение 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();
}
Я понятия не имею, как это исправить, какие-либо предложения?
Комментарии:
1. Вы читаете / записываете в обратном направлении. Вы хотите прочитать характеристики из BLE и записать результаты в байтовый массив. Вы записываете характеристики из массива байтов.
2. @jdweng можете ли вы объяснить это с помощью кода. Извините, я новичок в этом.
3. Далее выполняется запись в controlCharacteristic . Вы хотите прочитать.: controlCharacteristic . WriteAsync(новый байт[] {COMMAND_BYTE, COMMAND_HEART_RATE_CONTINUOUS, COMMAND_ON});
4. @jdweng Я также читаю характеристики, прежде чем записывать их в байтовый массив. Я редактирую свой пост, и вы можете заглянуть в него.
5. Смотрите код на следующей странице. Параметр записи представляет собой перечисление (а не массив байтов): github.com/jeroendesloovere/examples-windows/blob/master /…
Ответ №1:
Я решил эту проблему. Прежде всего, нам нужно проверить, есть ли в характеристике операция записи, для этого вы можете загрузить приложение под названием BLE scanner из play Store и подключиться к этому устройству. Когда мы подключимся к этому BLE, мы сможем увидеть доступные службы и характеристики периферийного устройства BLE. И там нам нужно проверить, какие характеристики имеет операция записи. Итак, если вы попытаетесь выполнить запись характеристик для характеристик, для которых нет операции записи на периферийном устройстве, это приведет к тому, что запись исключения не разрешена.