2016-10-13 9 views
1

내 시나리오는 다음과 같습니다.스위프트 3 : 백그라운드에서 주변기기를 검색하는 방법은 무엇입니까?

두 개의 주변 장치로 연결하고 내 앱을 백그라운드 모드로 설정하고 내 앱 연결이 끊어 질 때까지 주변 장치를 제거하기 시작합니다. 돌아올 때, 그들은 도달 할 때 다시 연결하지 않습니다.

앱이 포 그라운드에서 실행 중일 때 동일한 실험을 수행하면 아무런 문제가 발생하지 않습니다. iPhone에 더 가까운 주변 장치를 사용하면 다시 연결됩니다.

그러나 콘솔에서 주변 장치 연결이 끊어지면 DidDisconnectPeripheral 메서드가 호출되는 것을 볼 수 있습니다. 문제는 스캔이 불행하게도 그것이 작동하지 않습니다, 나는 this 대답을 읽고 모두에게 동일한 방식을했다

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { 
    numberOfTagsSending = numberOfTagsSending - 1 
    numberOfConnectedTags = numberOfConnectedTags - 1 
    print("Tag was disconnected. Start scanning.") 

    synchronizer.alreadySynced = false 

    central.scanForPeripherals(withServices: arrayOfServices, options: [CBCentralManagerScanOptionAllowDuplicatesKey : true]) 
} 

이 방법 내에서 호출되지 않는 것입니다. 사전

+0

'응용 프로그램 : didEnterBackground'에서이 함수를 호출 해 보았습니까? – KSigWyatt

+0

글쎄, 솔직히 나는하지 않았다. 하지만 AppDelegate에서 명시 적으로 호출해야하는 정보는 절대로 발견하지 못했습니다. – DCDC

+0

시도해보고 백그라운드에서 작동하는지 확인하십시오. 그렇지 않은 경우'central.scanForPeripherals()'메소드가 설정되어 있지 않습니다. 귀하의 질문에 명시된대로 – KSigWyatt

답변

3

에서

덕분에 당신은 당신이 다시 발견 할 필요가없는 CBPeripheral 인스턴스가되면. 간단히 연결할 수 있습니다. 주변 장치가 현재 범위 내에 있지 않으면 주변 장치가 범위에 들어 오면 iOS가 자동으로 연결되어 didConnectPeripheral 대리자 메서드가 호출됩니다.

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { 
    numberOfTagsSending = numberOfTagsSending - 1 
    numberOfConnectedTags = numberOfConnectedTags - 1 

    central.connect(peripheral) 
}