2017-02-21 23 views
0

장치 (나중에 "스캐너"라고 함)와 다른 장치 (나중에 "돌"이라고 함)가 있습니다. 스캐너는 돌을 스캔하고 디스플레이에 빌드에 대한 정보를 표시 할 수 있습니다. 스캐너는 블루투스를 통해 돌 정보를 전송할 수 있으며이 데이터를 읽고 앱에서 사용하고 싶습니다. 코드 연결 구현을 시작했지만 문제가 있음을 발견했습니다.CoreBluetooth를 통해 페어링 된 장치의 인스턴스를 가져 오지 못하는 이유는 무엇입니까?

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이 스캐너와 연결되어 있고 스캐너가 연결이 작동한다고 알립니다.

달성하고자하는 것은 무엇입니까?

스캐너가 연결되어 있는지 확인하는 viewcontroller를 만들고 싶습니다.

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

도와주세요. :)

LightBlue Explorer app 내 스캐너 장치에서 편집

이 표시되지 않습니다. 그러나 이것으로 app은 완벽하게 작동합니다.

아마도 CoreBluetooth를 사용하는 것은 잘못된 방법 일 수 있습니다. 더 나은 무엇인가. 앱 위의 제작자가 당신에게 의사 소통 할 수 있다면 그것을 할 수 있습니다.

+1

스캐너 장치에서 BLE 서비스를 사용하고 있습니까? 앱 스토어에서 LightBlue 앱을 사용해보세요. – Paulw11

+0

@ Paulw11 만약 아니라면? –

+0

'didConnect' 메서드를 호출하기 위해서는'didDiscoverPeripheral'의 주변 장치에 명시 적으로 연결해야합니다. 기기가 검색되지 않는 이유를 잘 모릅니다. 이 "돌"은 정확히 무엇입니까? – Mark

답변

0

Thanks @ Paulw11 님의 덧글 "스캐너"에서 iPod Accessory Protocol을 사용함을 깨달았습니다. ExternalAccessory 프레임 워크를 가져 와서 장치를 확인하십시오.

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

이 함수를 호출 한 후 액세서리 장치 목록이 표시되고 스캐너가있었습니다.