我在我的Xamarin项目中使用Plugin.BLE nuget包来查询我拥有的BLE设备。它似乎工作正常,但是当触发找到的设备事件时,有一个对象作为整个设备对象的一部分返回。该对象称为NativeDevice。
Intellisense表明这是一个可以在平台上操作的对象,这正是我想要做的,所以我可以在我的mvvm框架中存储和处理。
问题在于,如果我将对象作为设备投射到平台上并将其存储在var中,则var始终为null。
我应该如何从平台上的对象获取值,以便将它们传递回我的视图模型?
我的代码看起来像这样
(在表单项目中)
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是我在VM中使用的抽象类
答案 0 :(得分:0)
设备值null的原因是a.Device.NativeDevice的类型不是设备类型。它是NativeObject所以对于android它是BluetoothDevice类型,对于ios,它是CBPeripheral。
据我所知,您希望传递一个类型为Device的设备。所以你只需要将它替换为
NativeDevice = DependencyService.Get<INativeDevice>().ConvertToNative(a.Device.NativeDevice)
与
NativeDevice = DependencyService.Get<INativeDevice>().ConvertToNative(a.Device)
现在你可以在android中使用Device.BluethoothDevice。