Я использую пакет nuget Plugin.BLE в своем проекте Xamarin для опроса устройств BLE, которые у меня есть. Кажется, что он работает нормально, но есть объект, возвращаемый как часть общего объекта устройства, когда инициируется событие найденного устройства. Объект называется NativeDevice.
Intellisense показывает, что это объект, которым можно манипулировать на платформе, и это то, что я пытаюсь сделать, поэтому я могу хранить и обрабатывать его в своей среде mvvm.
Проблема в том, что если я приведу объект в качестве устройства на платформе и сохраню его в переменной, переменная всегда будет нулевой.
Как я должен получить значения от объекта на платформе, чтобы я мог передать их обратно в мою модель представления?
Мой код выглядит так
(в проекте форм)
adapter.DeviceDiscovered += (s, a) =>
{
var adList = new List<AdvertisingRecords>();
foreach (var r in a.Device.AdvertisementRecords)
{
adList.Add(new AdvertisingRecords { Data = r.Data, Type = (AdvertisingRecordType)r.Type });
}
var newbtd = new BluetoothDevice
{
AdvertisementRecords = adList,
NativeDevice = DependencyService.Get<INativeDevice>().ConvertToNative(a.Device.NativeDevice),
Name = a.Device.Name,
Rssi = a.Device.Rssi,
Id = a.Device.Id,
State = (BluetoothStates)a.Device.State
};
btd.Add(newbtd);
};
На платформе
[assembly: Xamarin.Forms.Dependency(typeof(NativeDeviceConverter))]
namespace MyApp.Droid.Injected
{
public class NativeDeviceConverter : INativeDevice
{
public NativeDevice ConvertToNative(object device)
{
var dev = device as Device;
if (dev != null)
return new NativeDevice { Name = !string.IsNullOrEmpty(dev.BluetoothDevice.Name) ? dev.BluetoothDevice.Name : string.Empty, Address = dev.BluetoothDevice.Address, Type = dev.BluetoothDevice.Type.ToString() };
else
return new NativeDevice();
}
}
}
NativeDevice - это мой абстрагированный класс, который я использовал в ВМ