Bluetooth 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% 再現可能です。
何が起こっているかについて、次の 2 つの推測を行うことができます。
1) 競合他社のアプリ #2 では、HRM を検出できるようにする設定が有効になっています。しかし、BTLEアクセサリとの通信は一方向だと思うので、これは可能ではないと思います。
2) iOS 10 には、デフォルトで無効になっているある種のプライバシー設定がありますが、競合他社のアプリ #2 はそれを有効にしており、私のアプリは後で HRM を見ることができます。
これは意味がありますか、それとも何が悪いのかについて誰かが理論を持っていますか?