0

いくつかの CoreBluetooth コードを作成しました。デバイスは検出できますが、検出した周辺機器の特性を検出できないようです。自分のコードを検証するために使用できる良いサンプル コードを持っている人はいますか?

これは私が書いたものです:

#import "ViewController.h"
@property(nonatomic, strong) CBCentralManager* centralmanager;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.centralmanager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}

- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
    CBCentralManagerState currentState =  central.state;
    NSLog(@"state %i", currentState);

    switch (central.state)
    {
        case CBCentralManagerStatePoweredOn:
        {
            NSDictionary *options = @{
                                      CBCentralManagerScanOptionAllowDuplicatesKey: @YES
                                      };
            [self.centralmanager scanForPeripheralsWithServices:nil options:options];
            NSLog(@"I just started scanning for peripherals");
            break;
        }
    }
}
- (void)centralManager:(CBCentralManager *)central
  didConnectPeripheral:(CBPeripheral *)peripheral{
    NSLog(@"connected!");
}

- (void) centralManager:(CBCentralManager *)central
  didDiscoverPeripheral:(CBPeripheral *)peripheral
      advertisementData:(NSDictionary *)advertisementData
                   RSSI:(NSNumber *)RSSI
{
    [self.centralmanager connectPeripheral:peripheral options:nil];

    if ([[advertisementData description] containsString:@“keyword”]) {


         NSLog(@"peripheral count %lu", (unsigned long)[peripheral.services count]);
         [peripheral.services count];
       for (int i=0; [peripheral.services count]; i++) {
            for (CBService *s in peripheral.services) {
                [peripheral discoverCharacteristics:nil forService:s];
            }
        }
    }
}


- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
    NSLog(@"did discover characteristic for service");
}

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSArray *)serviceUuids{
    NSLog(@"discovered a peripheral's services: %@", serviceUuids);
}
4

1 に答える 1

5

こちらをご覧ください: サンプルコード

基本的にプロセスは次のとおりです。

  1. デバイスのスキャン
  2. デバイスを発見
  3. デバイスに接続
  4. デバイスにサービスを要求する
  5. サービスに特性を尋ねる
  6. 特性による書き込み、読み取り、または通知の取得

その後、以前に検出されたデバイスをキャッシュから取得して直接接続できるため、デバイスを検索して検出する必要はありません。

編集: - - - - - - - - - -

例を読む: [aPeripheral readValueForCharacteristic:aChar];

通知の例: [aPeripheral setNotifyValue:YES forCharacteristic:aChar];

これらの呼び出しは両方とも- (void) peripheral:(CBPeripheral *)aPeripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error、BLE デバイスが値を返すときに呼び出される - 関数になります。通知を使用すると、デバイスがその特性の値を更新するたびに、このコールバックが自動的に呼び出されます。

于 2015-09-14T20:54:19.103 に答える