4

我希望我的应用可以删除配对的蓝牙设备。因为如果设备与 iPhone 配对,则该设备无法用于其他设备。我尝试了 CBCentralManager cancelPeripheralConnection,但它不起作用。他们仍然配对。

还是有其他应用程序仍在连接此服务器?

iPhone5,iOS7

4

2 回答 2

9

您不能在 iOS 中以编程方式取消配对设备。

cancelPeripheralConnection仅用于断开您的应用程序与设备的连接。

讨论

此方法是非阻塞的,任何CBPeripheral仍等待外围设备的类命令可能会也可能不会完成。因为其他应用程序可能仍然与外围设备有连接,所以取消本地连接并不能保证底层物理链接立即断开。然而,从应用程序的角度来看,外围设备被视为断开连接,中央管理器对象调用其委托对象的 centralManager:didDisconnectPeripheral:error: 方法。

于 2014-03-31T07:27:11.647 回答
2

cancelPeripheralConnection:应该管用。

当您连接外围设备(蓝牙设备)时,您可能正在这样做:

- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    [centralManager connectPeripheral: peripheral
                              options: nil];
}  

peripheral将and保留centralManager为@property很重要:

@property (nonatomic,strong) CBPeripheral *connectingPeripheral;
@property (nonatomic,strong) CBCentralManager *centralManager;

然后:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Starting Up a Central Manager
    self.centralManager = [[CBCentralManager alloc] initWithDelegate:self 
                                                               queue:nil
                                                             options: nil];
}

和:

- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    self.connectingPeripheral = peripheral;

    [centralManager connectPeripheral: self.connectingPeripheral
                              options: nil];
}  

然后当连接成功建立时,中央管理器对象调用:centralManager:didConnectPeripheral:

之后,您可以调用您的代码:

[self.centralManager cancelPeripheralConnection:self.connectingPeripheral];
于 2014-03-31T08:50:25.457 回答