Устройство отключается через некоторое время и не может получить характеристику - PullRequest
0 голосов
/ 26 апреля 2019

Я знаю, что упомянутая ошибка разъединения запрашивается много раз в стеке, но принятые ответы не являются реальным решением проблемы

Я пытаюсь подключить MI Band 3 к своему быстрому приложению. Он успешно подключился, но через некоторое время автоматически отключился

Error:  Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us." UserInfo={NSLocalizedDescription=The specified device has disconnected from us

Требование к моему приложению: мне нужно узнать частоту пульса и расстояние до Apple Watch, Fitbit и MI Smart Watch

Я пытался подключить один и тот же диапазон MI на нескольких устройствах, результат один и тот же. Но эта конкретная MI-группа прекрасно работает со своим собственным приложением

--> Connect Device - Kept reference of connected Device
    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        print("Connected With Peripheral: \(peripheral)")
        selectedPeripheral=peripheral
        self.delegate?.scannedPeripherals(Is: peripheral)

        /// Discover Services Provided By Device
        selectedPeripheral?.delegate=self
        selectedPeripheral?.discoverServices([heartRateServiceCBUUID])
    }

---> After Discovering services With heart Rate CBUUID
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        guard let characteristics = service.characteristics else { return }
        selectedPeripheral=peripheral
        for char in characteristics {
            print("Characterstics: \(char)")
            if char.properties.contains(.read) {
            }
            if char.properties.contains(.notify) {
                /// ------------- Setting Notify to true but not never call required delegates ----------------
                peripheral.setNotifyValue(true, for: char)
                print("\(char.uuid): properties contains .notify")
                peripheral.readValue(for: char)
            }
        }
    }


Calculating BPM from delegate
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
        switch characteristic.uuid {
        case bodySensorLocationCharacteristicCBUUID:
            let bodySensorLocation = bodyLocation(from: characteristic)
            print(bodySensorLocation)
        default:
            /// --------- here characteristic value is nil --------------
            let bpm = heartRate(from: characteristic)
            print("BPM: \(bpm)")
        }
    }

1 Ответ

0 голосов
/ 17 мая 2019

In func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?)

Попробуйте удалить peripheral.readValue(for: char) и протестируйте снова!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...