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
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.
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];