3

私が使用する場合:

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) に制御します。したがって、問題はここにあるのと同じくらいそこにあると信じる可能性があります。

4

1 に答える 1

2

私たちのペリフェラル コードは、この Bluetooth 仕様の UUID をアドバタイズしていないことが判明しました。

それらを広告パケットに入れるとすぐに、iOS はすぐにそれらを拾い上げました。

于 2012-07-09T17:42:01.017 に答える