我希望我的应用可以删除配对的蓝牙设备。因为如果设备与 iPhone 配对,则该设备无法用于其他设备。我尝试了 CBCentralManager cancelPeripheralConnection,但它不起作用。他们仍然配对。
还是有其他应用程序仍在连接此服务器?
iPhone5,iOS7
我希望我的应用可以删除配对的蓝牙设备。因为如果设备与 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
将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];