9

BTLE を使用してデバイス (arduino) に接続している iOS アプリがあります。iPad iOS 7 ですべて正常に動作しています。iOS 8 にアップグレードした後、CBCentralManager は周辺機器を検出しません。

- (void)startScanningForSupportedUUIDs
{
   [self.centralManager scanForPeripheralsWithServices:nil options:nil];

}

何が問題なのかわかりません。

4

2 に答える 2

16

iOS 8 では、CBManager をインスタンス化した後に何らかの理由で遅延が発生します。このメソッドでは、CBCentralManager がオンになっているときにスキャンを開始する必要があります。

-(void)centralManagerDidUpdateState:(CBCentralManager *)central{
switch (central.state) {
    case CBCentralManagerStatePoweredOff:
        NSLog(@"CoreBluetooth BLE hardware is powered off");
        break;
    case CBCentralManagerStatePoweredOn:
    {
        NSLog(@"CoreBluetooth BLE hardware is powered on and ready");
        NSArray         *uuidArray  = [NSArray arrayWithObjects:[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID], nil];
        NSDictionary    *options    = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
        [centralManager scanForPeripheralsWithServices:uuidArray options:options];
    }
        break;
    case CBCentralManagerStateResetting:
        NSLog(@"CoreBluetooth BLE hardware is resetting");
        break;
    case CBCentralManagerStateUnauthorized:
        NSLog(@"CoreBluetooth BLE state is unauthorized");
        break;
    case CBCentralManagerStateUnknown:
        NSLog(@"CoreBluetooth BLE state is unknown");
        break;
    case CBCentralManagerStateUnsupported:
        NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform");
        break;
    default:
        break;
}
于 2014-09-08T20:45:44.277 に答える
1

IOS 7 では、CBCentralManager の準備が整う前であっても、BLE スキャンを開始することで回避できました。IOS 7 では、このような場合に警告を吐き出していました -

CoreBluetooth[API MISUSE] は、電源がオンの状態でのみコマンドを受け入れることができます

IOS8 では、警告は表示されなくなり、スキャンは実際には開始されません。この問題を解決するには、CBCentral の電源がオンになるまで待ちます。つまり、CBCentral マネージャーが「CBCentralManagerStatePoweredOn」状態になるまで待ってから、スキャンを開始します。その変更で正常に動作します:)

于 2014-10-16T23:09:09.070 に答える