Nano Hash - криптовалюты, майнинг, программирование

CBPeripheral всегда подключается к CBCentralManager, даже если запрос на сопряжение не удался

Я новичок в программировании Core Bluetooth в iOS. Недавно я столкнулся с этой проблемой, когда при подключении к периферийному устройству на экране появляется предупреждение «Запрос сопряжения Bluetooth». Но независимо от того, отменил ли я запрос, ввел неверный пин-код или просто ничего не сделал,

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral

делегат всегда вызывается. Это означает, что соединение всегда успешно. Кто может объяснить, почему так происходит? Спасибо.


Ответы:


1

Подключение к периферийному устройству вызовет (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral;, поэтому, если на устройстве BLE включено сопряжение, вы получите запрос на сопряжение. В случае неудачного сопряжения, если устройство не имеет команды на отключение после неудачного сопряжения, оно останется подключенным, НО если вы попытаетесь обнаружить его службы (*) и характеристики, вы, вероятно, не получите ничего (в зависимости от того, как прошивка сторона устройства BLE настроена).

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
    NSLog(@"Did connect to peripheral: %@", peripheral);

    [peripheral setDelegate:self];
    [peripheral discoverServices:nil];   //* discover peripheral services
}


- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
for (CBService *service in peripheral.services) {
        NSLog(@"discovered service [%@]",service.UUID);
        [peripheral discoverCharacteristics:nil forService:service];
    }
}
29.04.2016

2

Свифт 3

    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral){

           self.bleManager.stopScan()
           peripheral.discoverServices(nil)
    }
    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {

          self.displayToastMessage("Fail to connect")
    }

    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?){

        if let er = error{
            self.displayToastMessage(er as! String)
            return
        }
        if let services = peripheral.services as [CBService]!{
            print(services)
        }
    }
    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?){

            if let arraychar = service.characteristics as [CBCharacteristic]!{

                 for getCharacteristic in arraychar{

                      print(getCharacteristic)
                 }
            }
    }
21.07.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..