Получение информации о нативном устройстве с устройства BluetoothLE - PullRequest
0 голосов
/ 03 мая 2018

Я использую пакет 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 - это мой абстрагированный класс, который я использовал в ВМ

1 Ответ

0 голосов
/ 04 мая 2018

Причина, по которой значение устройства равно null, заключается в том, что тип a.Device.NativeDevice не относится к типу устройства. Это NativeObject, поэтому для Android он имеет тип BluetoothDevice, а для ios - CBPeripheral.

Как я понимаю из вашего кода, вы хотите передать a.Device, который в свою очередь имеет тип Device. Так что вам просто нужно заменить эту строку

NativeDevice = DependencyService.Get<INativeDevice>().ConvertToNative(a.Device.NativeDevice)

с

NativeDevice = DependencyService.Get<INativeDevice>().ConvertToNative(a.Device)

Теперь вы можете использовать Device.BluethoothDevice в Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...