0

Bluetoothテクノロジー4.0を使用して近接センシングアプリケーションを開発しています。デバイスを検出できます。しかし、私は彼らとペアリングすることができません。メソッドを呼び出すこともできません[peripheral readRssi]。私がこれを達成したい方法は、中央がたとえば 10 個のデバイスをスキャンし、それらのデバイスを見つけた後、スキャンを停止してデバイスをペアリングし、RSSI 値を常に読み取ることです。

私のコード。

- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    BOOL (^test)(id obj, NSUInteger idx, BOOL *stop);
    test = ^ (id obj, NSUInteger idx, BOOL *stop) {
        if([[[obj peripheral] name] compare:peripheral.name] == NSOrderedSame)
            return YES;
        return NO;
    };

    PeripheralCell* cell;
    NSUInteger t=[peripherals indexOfObjectPassingTest:test];
    if(t!= NSNotFound)
    {
        cell=[peripherals objectAtIndex:t];
        cell.peripheral=peripheral;
        cell.rssi=RSSI;
        //NSLog(@"%@",RSSI);
        [scanResultTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:t inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
    }
    else{
        cell=[[PeripheralCell alloc] init];
        [peripherals addObject: cell];
        [myPeripheral addObject: peripheral];
        cell.peripheral=peripheral;
        cell.rssi=RSSI;
        NSLog(@"UUID===%@",[peripheral UUID]);
        [scanResultTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[peripherals count]-1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
        if([myPeripheral count]==3)
        {
            [manager stopScan];
            for(CBPeripheral *p in myPeripheral)
            {
                [manager connectPeripheral:p options:nil];      //this calls didConnectPeripheral but gets disconnected after some time 
                [p readRssi];     //this does not work even after connecting
            }
        }
    }
}

- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
    //self.cBReady = false;
    switch (central.state) {
        case CBCentralManagerStatePoweredOff:
            NSLog(@"CoreBluetooth BLE hardware is powered off");
            break;
        case CBCentralManagerStatePoweredOn:
            NSLog(@"CoreBluetooth BLE hardware is powered on and ready");
            //self.cBReady = true;
            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;
    }
}

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
    NSLog(@"connected peripheral");
}

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;
{
    NSLog(@"peripheral disconnected");
}

- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error
{
    NSLog(@"updated rssi");
}

デバイスをペアリングするにはどうすればよいですか...

4

1 に答える 1

1

多くの検索と試行錯誤の末、自分のコードが正しいことがわかりました。iPadの設定からデバイスを削除する必要がありました。

後藤Settings > General > Bluetooth > Devices.

アクセサリ インジケータをクリックして、デバイスを選択します。次の画面で、「このデバイスを忘れる」をクリックします。

アプリケーションを再度実行すると、問題が解決しました。

于 2013-01-14T06:02:56.453 に答える