2015-01-06 4 views
6

여기에 입력을 희망합니다.iOS CoreBluetooth : 상태 보존 및 복원

현재 iOS 프로젝트에서 CoreBluetooth를 신속하게 사용하고 있습니다. 이 앱은 기본적으로 작동하는 백그라운드에서 CoreBluetooth를 사용하여 통신 할 수 있습니다. 예상대로 작동하려면 주변 기기가 iOS 기기와 연결되어 있어야합니다. 연결이 끊어지면 주변 장치는 현재 작업을 중단합니다. 이것은 메모리 압박으로 인해 앱이 종료 된 경우에도 발생합니다. 이 경우 주변 장치가 작동을 멈추지 않아야하므로 문제가 있습니다.

  1. 가 복원 식별자로 CentralManager를 초기화 : 그것을 해결하기 위해, 나는 기본적으로 말한다 상태 보존 및 복원 백그라운드 모드를 구현하는 apples core bluetooth programming guide을 따랐다. 대의원 = 자기.
  2. willRestoreState 대리자 메서드를 구현합니다. NSLog something
  3. launchOptions에서 특수 키를 확인하십시오. NSLog 뭔가.

iOS가이 공통 프로젝트를 사용하여 배경에있는 동안 iOS에 앱을 닫도록 강요합니다 : BackgroundKill. 물론 앱이 더 이상 디버그 모드에서 실행되지 않기 때문에 중요한 부분에 NSLog 문을 추가하여 장치 콘솔에서 찾아야합니다. 좋은 소식은 앱이 종료 될 때 연결이 더 이상 취소되지 않는다는 것입니다. 이제 iOS가 주변 기기가 작동을 멈추지 않도록 연결을 유지하려고합니다. 스트라이크! 앱이 구독하는 배터리 서비스를 제외하고는이 시간 동안 중앙 및 주변 기기간에 통신이 이루어지지 않습니다. 활성 연결을 유지해야하는 유일한 이유는 주변 장치가 작동하지 않도록 방지하기 위해서입니다.

지금 앱을 수동으로 다시 실행하면 언급 된 NSLog가 표시되지 않습니다. willRestoreState 대리자는 호출되지 않으며 launchOptions은 nil입니다. CentralManager를 인스턴스화 할 때 "DISPATCH_QUEUE_CONCURRENT"대기열 대신 nil을 사용하려고했습니다. 효과가 없습니다.

앱을 다시 실행하면 보존 된 연결을 어떻게 사용해야합니까? willRestoreState 대리자가 호출되지 않는 이유는 무엇입니까? 내가 여기서 뭔가를 놓치고 있니? 상태 보존 및 복원을 사용하기 위해 시스템에 의해 배경/강제 폐쇄되는 동안 데이터를 수신해야합니까?

도와 주셔서 감사합니다. :)

+0

앱이 백그라운드에서 복원 된 직후 willRestoreState가 호출되어야합니다. 아이콘에서 앱을 실행하면 이미 실행 중이므로 별다른 기능을 수행하지 않을 수 있습니다.Docs에 따르면 복원 ​​할 것이 없으면 willRestoreState 대신 doUpdateState 메소드가 먼저 호출됩니다. – KoCMoHaBTa

답변

8

마지막으로 몇 가지 테스트를하고 결과를 얻었습니다. 이 필요하면 앱이 백그라운드로 시작된다는 것을 알 수 있습니다. 이는 주변 기기가 보존 된 연결에 데이터을 보낼 때마다 을 의미합니다. iOS는이 경우 didFinishLaunchingWithOptions을 통해 앱을 실행하므로 실행 옵션을 확인하고 무언가를 수행하는 데 ~ 10 초 정도 걸립니다. 그래서 내 문제는 연결에 전송 된 데이터가 없다는 사실과 관련이 있습니다. 이제이를 정리하기 위해 주변기기의 펌웨어를 변경해야합니다.

대리인 willRestoreState은 앱을 수동으로 다시 시작할 때 호출됩니다. 이 시점에서 iOS는 최근에 사용 된 중앙 서비스뿐만 아니라 연결된 주변 기기 목록 및 최근에 가입 한 서비스까지 제공합니다. 따라서 개체를 복원하고 연결된 주변 장치의 올바른 서비스에서 가입 특성을 완전히 활용해야했습니다.

+3

안녕하세요. STEX, 안녕하세요. "제 물건을 복원하고 올바른 서비스에서 등록 된 특성을 가져와야했습니다. 연결된 주변 장치가 다시 정상적으로 작동합니다. " 비슷한 문제에 직면하고 내 주변 기기 개체를 가져 오는 중 내 응용 프로그램을 다시 만들 수 없지만 연결 명령을 다시 보내야 만 위임 메서드를 설정해야합니다. 미리 감사드립니다. – Nik