1

PC で実行しているアプリがデータを取得できるように、iPhone を心拍数モニターとして機能させ、標準の心拍数サービスを使用して情報を送信するように設定しようとしています。私はiOSの初心者ですが、以前にAndroidとWindowsでBluetoothを実行していました。ここの情報に従っていて、最初のハードルに落ちています...

ドキュメントで指定されているように、最初に呼び出します

CBPeripheralManager *myPeripheralManager = [[CBPeripheralManager alloc] initWithDelegate:(id<CBPeripheralManagerDelegate>)self queue:nil options:nil];

また、peripheralManagerDidUpdateState コールバックも実装していますが、ここに問題があります。このコールバックは決して実行されません! 私は数分間待っていましたが、何も起こりませんでした。一日中検索してもオンラインで何も見つからなかったため、非常に簡単な手順を見逃していると思います。ここでコードと物理的にiPhoneで何かを行う際の明示的な手順を説明できる人はいますか? このコールバックを実行する前に接続する必要がありますか? 何かとペアリングする必要がありますか?

これが完全なコードです。それはすべて正常に実行され、エラーはまったく発生していません。

#import "ViewController.h"
@import CoreBluetooth;

@interface ViewController()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSLog(@"App running...");

    //Create the peripheral manager
    CBPeripheralManager *myPeripheralManager = [[CBPeripheralManager alloc] initWithDelegate:(id<CBPeripheralManagerDelegate>)self queue:nil options:nil];
}

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral{
    int state = peripheral.state;
    NSLog(@"Peripheral manager state =  %d", state);

    //Set the UUIDs for service and characteristic
    CBUUID *heartRateServiceUUID = [CBUUID UUIDWithString: @"180D"];
    CBUUID *heartRateCharacteristicUUID = [CBUUID UUIDWithString:@"2A37"];
    CBUUID *heartRateSensorLocationCharacteristicUUID = [CBUUID UUIDWithString:@"0x2A38"];


    //char heartRateData[2]; heartRateData[0] = 0; heartRateData[1] = 60;

    //Create the characteristics
    CBMutableCharacteristic *heartRateCharacteristic =
    [[CBMutableCharacteristic alloc] initWithType:heartRateCharacteristicUUID
                                       properties: CBCharacteristicPropertyNotify
                                            value:nil
                                      permissions:CBAttributePermissionsReadable];

    CBMutableCharacteristic *heartRateSensorLocationCharacteristic =
    [[CBMutableCharacteristic alloc] initWithType:heartRateSensorLocationCharacteristicUUID
                                       properties:CBCharacteristicPropertyRead
                                            value:nil
                                      permissions:CBAttributePermissionsReadable];
    //Create the service
    CBMutableService *myService = [[CBMutableService alloc] initWithType:heartRateServiceUUID primary:YES];
    myService.characteristics = @[heartRateCharacteristic, heartRateSensorLocationCharacteristic];

    //Publish the service
    NSLog(@"Attempting to publish service...");
    [peripheral addService:myService];

    //Set the data
    NSDictionary *data = @{CBAdvertisementDataLocalNameKey:@"iDeviceName",
                           CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:@"180D"]]};

    //Advertise the service
    NSLog(@"Attempting to advertise service...");
    [peripheral startAdvertising:data];

}

- (void)peripheralManager:(CBPeripheralManager *)peripheral
            didAddService:(CBService *)service
                    error:(NSError *)error {

    if (error) {
        NSLog(@"Error publishing service: %@", [error localizedDescription]);
    }
    else NSLog(@"Service successfully published");
}

- (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral
                                       error:(NSError *)error {

    if (error) {
        NSLog(@"Error advertising: %@", [error localizedDescription]);
    }
    else NSLog(@"Service successfully advertising");
}

@end
4

2 に答える 2