Почему я не получаю экземпляр сопряженного устройства через CoreBluetooth?

У меня есть устройство (названное позже "сканер") и другие устройства (названное позже "камень"). Сканер может сканировать камни и отображать информацию о них на встроенном дисплее. Сканер может отправлять информацию о камнях через Bluetooth, и я хочу прочитать эти данные и использовать их в своем приложении. Я начал реализацию подключения кода, но обнаружил проблему. Вот мой код:

import UIKit
import CoreBluetooth

class BluetoothViewController: UIViewController {

    var manager:CBCentralManager!
    var peripheral:CBPeripheral!

    override func viewDidLoad() {
        super.viewDidLoad()

        manager = CBCentralManager(delegate: self, queue: nil)
    }
}

extension BluetoothViewController: CBCentralManagerDelegate {

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            central.scanForPeripherals(withServices: nil, options: nil)
        }
        else {
            print("Bluetooth not available.")
        }
    }

    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        print("peripheral \(peripheral)")
        print("rssi \(RSSI)")
        print("advertisementData: \(advertisementData)")
        print("--------")
    }

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

    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
        print(peripheral)
    }

    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
        print(peripheral)
    }
}

extension BluetoothViewController: CBPeripheralDelegate {

}

Проблема в том, что сканер не отображается в

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

а также

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

никогда не звони.

Обратите внимание, что мой iPhone подключен к сканеру, и сканер сообщает мне, что соединение работает.

Чего я хочу добиться?

Я хочу создать контроллер просмотра, который проверяет, подключен ли сканер.

if connected then
    get scan information
else
    find device and connect
get scan information

Помогите мне, пожалуйста. :)

Редактировать

В приложении LightBlue Explorer мой сканер не не появляются. Но с этим приложение работает отлично.

Возможно, использование CoreBluetooth — неправильный способ сделать это. Что лучше. Если создатели вышеупомянутого приложения могут общаться, у вас есть возможность это сделать.


person Kamil Harasimowicz    schedule 21.02.2017    source источник
comment
Ваше устройство сканера рекламирует службу BLE? Попробуйте приложение LightBlue из магазина приложений.   -  person Paulw11    schedule 21.02.2017
comment
@Paulw11, а если нет?   -  person Kamil Harasimowicz    schedule 21.02.2017
comment
Вам необходимо явно подключиться к периферийному устройству в didDiscoverPeripheral, чтобы вызвать метод didConnect. Не знаю, почему ваше устройство не обнаруживается. Что это за камни?   -  person Mark    schedule 21.02.2017
comment
Камень не имеет значения. Я хочу подключить свое устройство к сканеру, но он не отображается в didDiscoverPeripheral   -  person Kamil Harasimowicz    schedule 21.02.2017
comment
@KamilHarasimowicz Если LightBlue его не видит, значит, это не периферийное устройство BLE (или оно не рекламирует сервис gatt)   -  person Paulw11    schedule 21.02.2017
comment
@Paulw11Paulw11, как работает это второе приложение?   -  person Kamil Harasimowicz    schedule 21.02.2017
comment
В инструкции к устройству указано, что оно использует iPod Accessory Protocol, поэтому устройство находится под программой MFi. Это означает, что он использует внешнюю структуру аксессуаров и устаревший Bluetooth.   -  person Paulw11    schedule 21.02.2017
comment
@Paulw11, ты прав. Я разместил ответ по вашей информации. Tnx за помощью.   -  person Kamil Harasimowicz    schedule 21.02.2017


Ответы (1)


Благодаря комментарию @Paulw11, я понял, что мой «сканер» использует протокол аксессуаров iPod. Чтобы убедиться, что я импортирую ExternalAccessory framework и проверяю наличие устройств.

    EAAccessoryManager.shared().showBluetoothAccessoryPicker(withNameFilter: nil, completion: nil)

После вызова этой функции я увидел список дополнительных устройств, и там был мой сканер.

person Kamil Harasimowicz    schedule 21.02.2017