How do I remove paired Bluetooth devices on iOS?

2019-08-07 04:07发布

问题:

I want my app could remove paired bluetooth devices. Becaues if device paried with iPhone, the device couldn't used for another device. I tried CBCentralManager cancelPeripheralConnection, but it doesn't work. they're still paired.

Or there's some other app still connected this server?

iPhone5,iOS7

回答1:

You cannot unpair a device programmatically in iOS.

The cancelPeripheralConnection is only to disconnect your apps connection to the device.

Discussion

This method is nonblocking, and any CBPeripheral class commands that are still pending to peripheral may or may not complete. Because other apps may still have a connection to the peripheral, canceling a local connection does not guarantee that the underlying physical link is immediately disconnected. From the app’s perspective, however, the peripheral is considered disconnected, and the central manager object calls the centralManager:didDisconnectPeripheral:error: method of its delegate object.



回答2:

cancelPeripheralConnection: should work.

When you connect with a peripheral (Bluetooth device) probably you are doing it in:

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

It is important to do it keeping the peripheral and the centralManager as a @property:

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

Then:

- (void)viewDidLoad
{
    [super viewDidLoad];

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

And:

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

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

Then when the connection is successfully stablished, the central manager object calls: centralManager:didConnectPeripheral:

After that you can call in your code:

[self.centralManager cancelPeripheralConnection:self.connectingPeripheral];