1

我有一个可以连接到蓝牙 LE 心率监测器的健身应用程序。在过去的几年里,我对它没有任何问题。现在我正在为 iOS 10 更新它,并且发生了一些奇怪的事情。如果我扫描这样的外围设备......

- (id)init {
    self.heartRateService = @"180D";
    self.heartRateKey = @"2A37";
    self.allServices = [NSArray arrayWithObjects:[CBUUID UUIDWithString:self.heartRateService], nil];
    self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}

- (void)startScanning {
    if (self.centralManager.state == CBCentralManagerStatePoweredOn) {
        [self.centralManager scanForPeripheralsWithServices:self.allServices options:nil];
    }
}

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
    DLog(@"found peripheral: %@", peripheral);
    DLog(@"advertisementData: %@", advertisementData);
    DLog(@"RSSI: %@", RSSI);
}

...它找不到心率监测器——扫描开始但从didDiscoverPeripheral未被调用。如果我尝试竞争对手的应用程序 #1,它会从 HRM 中查找并显示数据,但如果我退出并返回我的应用程序,我的应用程序仍然找不到 HRM。如果我尝试竞争对手的应用程序 #2,它会查找并显示来自 HRM 的数据,如果我退出它并返回我的应用程序,那么我的应用程序会立即连接并按预期工作。似乎竞争对手应用程序 #1 有不同的方式来查找 HRM,而竞争对手应用程序 #2 不仅可以找到 HRM,还可以让我的应用程序在之后找到它。虽然这种情况看起来很奇怪,但它是 100% 可重现的。

我可以对正在发生的事情做出两个猜测:

1) 竞争对手应用程序#2 在 HRM 上启用了一些设置,以便找到它。但我认为这是不可能的,因为我认为与 BTLE 配件进行通信是一种方式。

2) iOS 10 有某种默认禁用的隐私设置,但竞争对手的应用程序 #2 启用了它,允许我的应用程序在之后查看 HRM。

这有什么意义吗,或者有人对出了什么问题有理论吗?

4

0 回答 0