我希望我的应用可以移除已配对的蓝牙设备。因为如果设备与iPhone配对,该设备就无法用于其他设备。
我尝试了CBCentralManager cancelPeripheralConnection,但它没有生效。它们仍然被配对。
还是有其他应用程序连接到了这个服务器吗?
iPhone5,iOS7
在iOS中,您无法以编程方式取消配对设备。
cancelPeripheralConnection
方法只是断开您的应用与设备之间的连接。
讨论
此方法是非阻塞的,仍然挂起到外设的任何
CBPeripheral
类命令可能完成或可能不会完成。由于其他应用程序可能仍然连接到外设,因此取消本地连接并不保证底层物理连接立即断开。但从应用程序的角度来看,外设被视为已断开连接,中央管理器对象调用其代理对象的 centralManager:didDisconnectPeripheral:error: 方法。
cancelPeripheralConnection:
应该可以解决问题。
当您连接到一个外围设备(蓝牙设备)时,可能在进行以下操作:
- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
[centralManager connectPeripheral: peripheral
options: nil];
}
在进行操作时,保持peripheral
和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];