Правильное использование IOBluetoothHandsFree для получения данных устройства - PullRequest
0 голосов
/ 21 октября 2018

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

Устройство подключено к моему Mac и работает нормально.Устройство поддерживает HFP (профиль громкой связи), который я хочу использовать для получения некоторой информации об устройстве.

Вот код:

func connect()
{
    if let bluetoothDevice = IOBluetoothDevice(addressString: "Bluetooth Device ID")
    {
        if !bluetoothDevice.isPaired() || !bluetoothDevice.isConnected() { continue }                    
        // Device is connected and paired, everything works fine until here.
        if bluetoothDevice.isHandsFreeDevice
        {
           // This line will also be executed, so the device supports the HFP.
           let handsFree = IOBluetoothHandsFree(device: bluetoothDevice, delegate: self)
           // handsFree?.connect()
           // Swift.print(handsFree?.isConnected) // returns false.
           let batteryValue = handsFree?.indicator(IOBluetoothHandsFreeIndicatorBattChg)
           Swift.print(batteryValue) // Always returns zero, can't be true.
           Swift.print(handsFree?.outputVolume) // Always returns 0.5.
        }
    }
}

extension Controller : IOBluetoothHandsFreeDelegate
{
    func handsFree(_ device: IOBluetoothHandsFree!, disconnected status: NSNumber!)
    {
        Swift.print("disconnected")
    }
    func handsFree(_ device: IOBluetoothHandsFree!, scoConnectionClosed status: NSNumber!)
    {
        Swift.print("scoConnectionClosed")
    }

    func handsFree(_ device: IOBluetoothHandsFree!, scoConnectionOpened status: NSNumber!)
    {
        Swift.print("scoConnectionOpened")
    }

    func handsFree(_ device: IOBluetoothHandsFree!, connected status: NSNumber!)
    {
        Swift.print("connected status: " + status.description)
    }

    func handsFree(_ device: IOBluetoothHandsFreeDevice!, batteryCharge: NSNumber!)
    {
         Swift.print("batteryCharge: " + batteryCharge.description)
    }
}

При выполнении строки

let handsFree = IOBluetoothHandsFree(device: bluetoothDevice, delegate: self)

Я получаю следующие ошибки:

Подклассы должны переопределить (IOBluetoothSDPUUID *) deviceUUID Подклассы должны переопределить (IOBluetoothSDPUUID *) localUUID Получена ошибка от IOServiceOpen () - 0xe00002c7.NULLing из io_service_t.[AudioHAL_Client] AudioHardware.cpp: 1046: AudioObjectAddPropertyListener: AudioObjectAddPropertyListener: нет объекта с заданным идентификатором 0

Я предполагаю, что свойства должны быть переопределены в делегате, но такого свойства нет.Чего мне не хватает?Как правильно подключиться к устройствам (или использовать уже подключенные устройства) для связи с ними?

...