9

バックグラウンド モードで BLE をスキャンする作業を行っています。

バックグラウンド スキャンで問題が発生しない。フォアグラウンドモードで非常にうまく機能します。

以下は、いくつかのコード行です。

dispatch_queue_t centralQueue = dispatch_queue_create("com.XXXXX.BLEback", DISPATCH_QUEUE_SERIAL);// or however you want to create your dispatch_queue_t
manager = [[CBCentralManager alloc] initWithDelegate:self queue:centralQueue options:nil];

- (void)centralManagerDidUpdateState:(CBCentralManager *)central 
{
    if (central.state == CBCentralManagerStatePoweredOn) {

        [self startScan];
    }

    if (![self supportLEHardware]) 
    {
        @throw ([NSError errorWithDomain:@"Bluetooth LE not supported"
                                    code:999
                                userInfo:nil]);
    }
}

- (void)startScan
{
    NSDictionary * options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:false] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
    [manager scanForPeripheralsWithServices:nil options:options];
}

ここではサービスとして nil を渡しています。

Xcode の Devices セクションでログを受け取ります。しかし、アプリケーションではありません。

Notice>: (Error) Discovered unknown type for scan: {
        kCBAdvDataChannel = 37;
        kCBAdvDataIsConnectable = 1;
        kCBAdvDataManufacturerData = <00003962 6708f4c1 00000000 00d02b00 20d03300 20d03300 20>;
        kCBAdvDataWSaturated = 0;
        kCBAdvDataWlanRSSI = 0;
    }, -51, puck type: 57
4

2 に答える 2

13

バックグラウンドでサービスをスキャンすることはできませんnil。関心のあるサービスを指定する必要があります。ドキュメントから

bluetooth-central バックグラウンド モードを指定したアプリは、バックグラウンドでスキャンできます。つまり、serviceUUIDs パラメータで指定して、1 つ以上のサービスを明示的にスキャンする必要があります。

于 2014-10-28T10:33:10.917 に答える
3

アプリが引き続きバックグラウンドで Bluetooth の更新を受信できるようにするには、にUIBackgroundModesエントリを追加し、リストInfo.plistに値を含める必要がありbluetooth-centralます。

于 2014-10-28T10:29:40.817 に答える