0

我想在IOS上实现后台蓝牙扫描。当应用程序进入后台模式时,它会调用实现 DiscoveredPeripheral 功能的 TestCentralManagerDelegate。当检测到新的蓝牙外围设备时触发。如果检测到新的蓝牙设备,则应用程序读取字典广告数据中显示的制造数据(作为 DiscoveredPeripheral 函数的参数)。制造数据通过调用ManufactureData = adsData["kCBAdvDataManufacturerData"].ToString()获得。制造数据的发现是在两个不同的 iPhone 5s 和 6 上测试的,它们的 iOS 12.1 相同。当应用程序进入后台模式时,我锁定了屏幕。在 iPhone 5s 的情况下,我观察到每次触发 DiscoveredPeripheral 函数时都会找到 ManufactureData。每次我得到 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);
            }

        }
4

0 回答 0