私はBluetoothデバイスをスキャンしています。そのために私はCBCentralManager
を使用していますので、CoreBluetooth - didDiscoverPeripheralは、特定のserviceUUIDに対しては一度も呼び出されませんでしたが、無しで動作します。
- (void)startScanning
{
[self.centralManager scanForPeripheralsWithServices:nil options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];
}
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
NSLog(@"\n%@, rssi: %@", peripheral.identifier.UUIDString, RSSI);
// do stuff
}
ように私は他のデバイスにビーコンをシミュレートするEstimoteアプリを使用しています。
コンソール出力は、そのように見えます2017年7月26日14:43:56.711830 ExampleApplicationが[445:55698]末梢:
6A3E0CB4-74BB-4472-98AA-0C9DEB1D4551、RSSI:-28
これまでのところすべて問題ありません。
ここでは、アプリがバックグラウンドのときにもBluetoothデバイスをスキャンします。そのために、私はInfo.plist
また
<key>UIBackgroundModes</key>
<string>bluetooth-central</string>
に、このようなプロパティを追加し、私はそれがserviceUUIDs
としてnil
を渡すときに、バックグラウンドでのBluetoothデバイスをスキャンすることはできませんことを読んだので、私は以前に発見された周辺機器のUUIDを取ると、それを渡しますCBCentralManager
CBUUID *uuid = [CBUUID UUIDWithString:@"6A3E0CB4-74BB-4472-98AA-0C9DEB1D4551"];
[self.centralManager scanForPeripheralsWithServices:@[uuid] options:options];
そして、問題があるに - didDiscoverPeripheral
アプリがフォアグラウンドにあるときでも、もう呼び出されることはありません。理由は何ですか?以前に発見されたデバイスのUUIDを問題なく使用しましたが、そうではありません。何か案は?
ペリフェラルのUUIDではなく、ペリフェラルによってアドバタイズされているサービスのUUIDをスキャンする必要があります。ペリフェラルのUUIDが変更され、同じペリフェラルで異なるiOSデバイスが表示されますが、サービスペリフェラルは一貫しています。 – Paulw11
問題は、私が受け取った周辺機器に対して、 'services'プロパティが空であることです。 –
@mag_zbc周辺機器が何らかのサービスを持っている(サービスUUIDを与える)広告を入れていない場合、特別にスキャンすることはできませんそれを宣伝しなければ、接続してからサービスをスキャンする必要があるからです。 – Larme