фоновый режим bluetooth IOS при заблокированном экране - PullRequest
0 голосов
/ 24 ноября 2018

Я хотел бы реализовать фоновое сканирование Bluetooth на IOS.Когда приложение переходит в фоновый режим, оно вызывает TestCentralManagerDelegate, который реализует функцию DiscoveredPeripheral.Он срабатывает при обнаружении нового периферийного устройства Bluetooth.Если обнаружено новое устройство Bluetooth, приложение считывает производственные данные, которые представлены в словаре advertisingData (в качестве аргумента функции DiscoveredPeripheral).Производственные данные получаются путем вызова ManufactureData = advertisingData ["kCBAdvDataManufacturerData"]. ToString ().Обнаружение данных о производстве было протестировано на двух разных iPhone 5 и 6 с той же iOS 12.1.Когда приложение переходит в фоновый режим, я заблокировал экран.В случае iPhone 5s я заметил, что ManufactureData обнаруживалась каждый раз, когда запускалась функция DiscoveredPeripheral.Этот факт не относится к iPhone 6, каждый раз, когда я получаю ManufactureData = null.Стоит отметить, что данные о производстве поступают в обоих случаях, если экран не заблокирован.

Я не понимаю, почему iPhone 6 не находит ManufactureData, а iPhone 5s - нет.Я бы согласился с тем фактом, что телефоны имеют разные операционные системы, и это подразумевает разные ответы, но в моем случае это не так.Я буду признателен за любую помощь для лучшего понимания вышеупомянутой проблемы.

Вот код, который я использую Xamarin.iOS.

public override  void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
        {

            try
            {
                central.StopScan();

                if (peripheral == null || advertisementData == null)
                {
                    central.ScanForPeripherals(cbuuids);
                    return;
                }

                string ManufactureData;

                if (advertisementData.ContainsKey(new NSString("kCBAdvDataManufacturerData")))
                {
                    ManufactureData = advertisementData["kCBAdvDataManufacturerData"].ToString();
                }
                else
                {

                    ManufactureData = null;

                    CrossLocalNotifications.Current.Show("no advertising data", "no advertising data", 10);
                    central.ScanForPeripherals(cbuuids);
                    return;
                }


                central.ScanForPeripherals(cbuuids);
            }
            catch
            {
                central.ScanForPeripherals(cbuuids);
            }

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