여기에 입력을 희망합니다.iOS CoreBluetooth : 상태 보존 및 복원
현재 iOS 프로젝트에서 CoreBluetooth를 신속하게 사용하고 있습니다. 이 앱은 기본적으로 작동하는 백그라운드에서 CoreBluetooth를 사용하여 통신 할 수 있습니다. 예상대로 작동하려면 주변 기기가 iOS 기기와 연결되어 있어야합니다. 연결이 끊어지면 주변 장치는 현재 작업을 중단합니다. 이것은 메모리 압박으로 인해 앱이 종료 된 경우에도 발생합니다. 이 경우 주변 장치가 작동을 멈추지 않아야하므로 문제가 있습니다.
- 가 복원 식별자로 CentralManager를 초기화 : 그것을 해결하기 위해, 나는 기본적으로 말한다 상태 보존 및 복원 백그라운드 모드를 구현하는 apples core bluetooth programming guide을 따랐다. 대의원 = 자기.
- willRestoreState 대리자 메서드를 구현합니다. NSLog something
- launchOptions에서 특수 키를 확인하십시오. NSLog 뭔가.
iOS가이 공통 프로젝트를 사용하여 배경에있는 동안 iOS에 앱을 닫도록 강요합니다 : BackgroundKill. 물론 앱이 더 이상 디버그 모드에서 실행되지 않기 때문에 중요한 부분에 NSLog 문을 추가하여 장치 콘솔에서 찾아야합니다. 좋은 소식은 앱이 종료 될 때 연결이 더 이상 취소되지 않는다는 것입니다. 이제 iOS가 주변 기기가 작동을 멈추지 않도록 연결을 유지하려고합니다. 스트라이크! 앱이 구독하는 배터리 서비스를 제외하고는이 시간 동안 중앙 및 주변 기기간에 통신이 이루어지지 않습니다. 활성 연결을 유지해야하는 유일한 이유는 주변 장치가 작동하지 않도록 방지하기 위해서입니다.
지금 앱을 수동으로 다시 실행하면 언급 된 NSLog가 표시되지 않습니다. willRestoreState 대리자는 호출되지 않으며 launchOptions은 nil입니다. CentralManager를 인스턴스화 할 때 "DISPATCH_QUEUE_CONCURRENT"대기열 대신 nil을 사용하려고했습니다. 효과가 없습니다.
앱을 다시 실행하면 보존 된 연결을 어떻게 사용해야합니까? willRestoreState 대리자가 호출되지 않는 이유는 무엇입니까? 내가 여기서 뭔가를 놓치고 있니? 상태 보존 및 복원을 사용하기 위해 시스템에 의해 배경/강제 폐쇄되는 동안 데이터를 수신해야합니까?
도와 주셔서 감사합니다. :)
앱이 백그라운드에서 복원 된 직후 willRestoreState가 호출되어야합니다. 아이콘에서 앱을 실행하면 이미 실행 중이므로 별다른 기능을 수행하지 않을 수 있습니다.Docs에 따르면 복원 할 것이 없으면 willRestoreState 대신 doUpdateState 메소드가 먼저 호출됩니다. – KoCMoHaBTa