0

내 iOS 앱에서 BLE 주변 기기에 성공적으로 연결하여 서비스를 발견하고 특성에 가입하여 특성 값이 변경 될 때마다 앱에 통지되도록 할 수 있습니다. 앱이 백그라운드에서 실행되는 동안 이러한 모든 문제는 발생하지 않습니다.CoreBluetooth 주변 서비스가 다시 연결/복원하는 동안 비게됩니다.

그러나 상태 복원이 발생하면 문제가 발생합니다. centralManager:willRestoreState: 메서드에서는 이전에 연결된 주변 장치를 retrieveConnectedPeripheralsWithServices: 메서드를 사용하여 검색 할 수 있습니다. 하지만 검색된 주변 기기에서 discoverServices: 메서드를 호출하면 아무런 반응이 없습니다. peripheral:didDiscoverServices: 메서드가 호출되지 않습니다. 검색된 주변 장치의 서비스 속성 값도 null입니다. iOS가 서비스와 특성을 캐시하지 않습니까?

참고 : BLE 주변 장치는 서비스를 처음에 알립니다. 앱이 처음 시작되면 주변 기기의 값을 읽고 사용자 특정 데이터를 특성에 작성합니다. 게시물 작성, 주변 장치는 광고 서비스를 중단합니다. 그러나 펌웨어 엔지니어는 서비스가 주변 장치에 의해 중단 되더라도 상태 복원에서 검색된 주변 장치는 캐시 된 서비스를 가져야한다고 주장합니다. 사실입니까?

답변

0

retrieveConnectedPeripheralsWithServices:을 통해 검색 한 주변 장치의 연결 상태를 확인 했습니까?

당신은 그들이 단지 시스템 레벨에 연결되어있을 수 있습니다 상기 방법을 통해 주변 장치를 얻을

(아이폰 OS) 다음 CoreBluetooth 프레임 워크는 당신이 하나가 retrieveConnectedPeripheralsWithServices: 메소드의 동작되는 알고 있어야 할 몇 가지 단점이있다 (API 문서의 토론 섹션 참조). 따라서 주변 장치를 올바르게 사용하려면 먼저 주변 장치에서 connect를 호출해야합니다. 옵션 :

연결된 주변 장치의 목록은 다른 응용 프로그램에 의해 연결되어 있고 그가 connectPeripheral를 사용하여 로컬 연결해야합니다 자들을 포함 할 수 있습니다 : 여기 API documentation에서 해당 부분은 그들이 사용할 수있는 방법 전에.

서비스 캐싱 : iOS는 발견 된 서비스와 해당 특성을 캐시합니다.

  • 서비스를 전송하여 iOS 장비를 끄고 BLE에 설정 앱 또는 다시 시작,

    • BLE 전원을 껐다가, 예를 들어 변경 알림 : 만 캐시를 업데이트하는 아이폰 OS를 강제 할 수있는 방법에있다 당신은 Bluetooth Configuration Profile를 통해 블루투스 스택에서 로그 메시지도를 활성화 할 수 있습니다 주변 측면에서 GAP 서비스를 통해

    주 (활성 연결이 필요합니다). 특히 BLE 관련 문제를 디버깅 할 때 매우 유용 할 수 있습니다 (로그를 사용하는 데 약간 번거 롭긴하지만).