WedX - журнал о программировании и компьютерных науках

Получение собственной информации об устройстве с устройства BluetoothLE

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

03.05.2018

  • можете ли вы поделиться полным кодом этого. В основном код интерфейса INativeDevice. 02.11.2020

Ответы:


1

Причина, по которой значение устройства равно 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.

04.05.2018
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]