Как удалить сопряженные устройства Bluetooth на iOS?

Я хочу, чтобы мое приложение могло удалять сопряженные устройства Bluetooth. Потому что, если устройство было сопряжено с iPhone, устройство нельзя было использовать для другого устройства. Я пробовал CBCentralManager отменитьPeripheralConnection, но это не работает. они все еще в паре.

Или какое-то другое приложение все еще подключено к этому серверу?

iPhone5,iOS7


person studentdeng    schedule 31.03.2014    source источник


Ответы (2)


Вы не можете отключить устройство программно в iOS.

cancelPeripheralConnection предназначен только для отключения подключения приложений к устройству.

Обсуждение

Этот метод является неблокирующим, и любые команды класса CBPeripheral, которые все еще находятся в состоянии ожидания для периферийного устройства, могут завершиться, а могут и не завершиться. Поскольку другие приложения могут по-прежнему иметь подключение к периферийному устройству, отмена локального подключения не гарантирует немедленного отключения базовой физической связи. Однако с точки зрения приложения периферийное устройство считается отключенным, и объект центрального диспетчера вызывает метод centralManager:didDisconnectPeripheral:error: своего объекта делегата.

person rckoenes    schedule 31.03.2014
comment
Возможно, это возможно с частными API, если приложение не предназначено для App Store: github.com/nst/iOS-Runtime-Headers/blob/master/ - person Etan; 31.03.2014

cancelPeripheralConnection: должно работать.

Когда вы подключаетесь к периферийному устройству (устройству Bluetooth), вероятно, вы делаете это в:

- (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];
person Gabriel.Massana    schedule 31.03.2014
comment
ИМО, вы отвечаете на вопрос о том, как «отключить» периферийное устройство от телефона, а не о том, как «отвязать» периферийное устройство от телефона. Это два разных случая. - person Maciej Pigulski; 28.07.2016