屏幕锁定时的蓝牙背景模式IOS

时间:2018-11-24 11:18:08

标签: background core-bluetooth ios-background-mode

我想在IOS上实现背景蓝牙扫描。当应用程序进入后台模式时,它将调用TestCentralManagerDelegate,该实现实现DiscoveredPeripheral函数。当检测到新的蓝牙外围设备时触发。如果检测到新的蓝牙设备,则应用程序将读取在Dictionary adsData中显示的制造数据(作为DiscoveredPeripheral函数的参数)。通过调用ManufactureData = advertiseData [“ kCBAdvDataManufacturerData”]。ToString()获得制造数据。在具有相同iOS 12.1的两个不同iPhone 5s和6上测试了制造数据的发现。当应用程序进入后台模式时,我锁定了屏幕。 对于iPhone 5s,我观察到每次都会找到ManufactureData 触发DiscoveredPeripheral函数。每次我获得ManufactureData = null时,iPhone 6都不是这样。值得一提的是,如果屏幕未锁定,则在两种情况下都会接收到制造数据。

我不明白为什么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);
            }

        }

0 个答案:

没有答案