私が使用する場合:
CBUUID * uuid = [CBUUID UUIDWithString:@"1800"]; // GAP
DEBUG_LOG(@"CBUUID: %@",uuid); // CBUUID: Generic Access Profile
_centralMan = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_centralMan scanForPeripheralsWithServices:[NSArray arrayWithObject:uuid]
options:nil];
周辺機器が見つかりませんが、使用すると:
_centralMan = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_centralMan scanForPeripheralsWithServices:nil
options:nil];
…すぐに現れます。
接続すると、期待しているすべてのサービスを検出/読み取り/書き込みできます。私の理解では、GAP がそれを可能にします。CBUUID
また、実行中であることがわかっている他のサービス (具体的には「1804」、TX 電源サービス) に対しても試しましたが、役に立ちませんでした。スキャンでは何も検出されません。
サービスが実行されていても(接続時にサービスと通信できます)、サービスUUID配列を渡してスキャンするnil
と、このデリゲートメソッドが呼び出されます...
-(void) centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI {
DEBUG_LOG(@"Found peripheral w/ UUID: %@ RSSI: %@ \n AdvData: %@",peripheral.UUID,RSSI,advertisementData);
DEBUG_LOG(@"Services found: %d",peripheral.services.count);
for (CBService * service in peripheral.services) {
DEBUG_LOG(@"Found service: %@ w/ UUID %@",service, service.UUID);
}
}
…常に「サービスが見つかりました: 0」と報告されます。services
スキャン中に見つかったサービスが配列に取り込まれることを期待する必要がありますか? (これは、に基づいて、少なくとも部分的に可能であると思いscanForPeripheralsWithServices:[NSArray arrayWithObject:uuid]
options:nil
ます。)
これは、周辺機器のサービス広告の問題でしょうか? API の使い方が間違っていませんか? どんなガイダンスも大歓迎です!:-)
PS: 私はかなり環境に優しく、Bluetooth を使用しています。
PPS: ソースを周辺機器 (CC2540DK) に制御します。したがって、問題はここにあるのと同じくらいそこにあると信じる可能性があります。