Я использую пакет nuget Plugin.BLE в своем проекте Xamarin для опроса имеющихся у меня устройств BLE. Кажется, он работает нормально, но есть объект, возвращаемый как часть общего объекта устройства, когда запускается событие найденного устройства. Объект называется NativeDevice.
Intellisense показывает, что это объект, которым можно манипулировать на платформе, что я и пытаюсь сделать, чтобы я мог хранить и обрабатывать его в своей структуре mvvm.
Проблема в том, что если я передам объект как устройство на платформе и сохраню его в var, var всегда будет нулевым.
Как я должен получить значения от объекта на платформе, чтобы я мог передать их обратно в свою модель представления?
Мой код выглядит так
(в проекте формы)
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 — это мой абстрактный класс, который я использовал в виртуальной машине.