0

または必要がありますがapplicationDidEnterBackground、次のエラーが発生します。applicationWillResignActivestartAdvertising

CoreBluetooth[API MISUSE] <CBPeripheralManager: 0x146a4e30> can only accept this command while in the powered on state.

私が使う:

- (void)applicationWillResignActive:(UIApplication *)application
{
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;
    [_locationManager stopRangingBeaconsInRegion:_runningBeacon];
    NSLog(@"stop monitoring");
    NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"23542266-18D1-4FE4-B4A1-23F8195B9D39"];
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:1 minor:1 identifier:@"com.devfright.myRegion"];
    self.beaconPeripheralData = [self.beaconRegion peripheralDataWithMeasuredPower:nil];
    self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];
    [self.peripheralManager startAdvertising:self.beaconPeripheralData];

    if ([self.peripheralManager isAdvertising]) {
        NSLog(@"peripeheralManager is advertising");
    }
}

どんな助けでも大歓迎です..

4

2 に答える 2

2

アプリから BT 広告データを積極的に発信したい場合は、アプリをフォアグラウンドにする必要があると思います。これはAppleクラスリファレンスからのものです

[..] データ アドバタイズは「ベスト エフォート」ベースで行われます。これは、スペースが限られており、複数のアプリが同時にアドバタイズする可能性があるためです。アプリがフォアグラウンドにある間、サポートされている広告データ キーの任意の組み合わせに対して、最初の広告データで最大 28 バイトのスペースを使用できます[..]

バックグラウンドでは、ビーコンのみを聞くことができます。そのためには、アプリとビーコン データをCLLocationManager

于 2014-05-14T13:41:14.497 に答える
1

このエラーを黙らせるには、委譲メソッドperipheralManagerDidUpdateState:でCBPeripheralManagerメソッドstartAdvertising:を呼び出すのを待ちます。ここで重要なのは、CBPeripheralManager メソッドを実行する前に、ペリフェラルの状態が常に CBPeripheralManageStatePoweredOn と同じであることを確認することです。

于 2014-05-20T23:37:25.437 に答える