2017-09-14 12 views
1

시계를 통해 부모 앱의 화면에서 특정 작업을 실행할 수있는 원격 제어 유형의 시계 키트 앱을 만들고 싶습니다. 시계 응용 프로그램이 시작되면 응용 프로그램과 연결 중임을 나타내는 레이블이 표시됩니다.WatchOS 3 - 부모 앱이 포 그라운드에 있는지 어떻게 알 수 있습니까?

나는 WCSession을 만들고 앱에 메시지를 보내어 앱이 포 그라운드에 있는지 확인합니다. 앱이 백그라운드에 있어도 여전히 응답을 보냅니다. 내 시계 앱은 앱이 준비되었다고 생각합니다.

[UIApplication sharedApplication] .applicationState를 쿼리 해 보았습니다.하지만 디버깅 중에는 항상 UIApplication이 메인 스레드에서만 호출 될 수 있다는 경고가 반환되었습니다.

는 또한 openparentapplication 유사한 기능을 할 수있는 방법입니다 읽고,하지만 사용되지 않습니다 나는 WatchOS 2로 믿거 나 3

어떻게 응용 프로그램이있는 시계를 말할 내가 수 있어요 전경 그래서 UI의 요소를 업데이트하기 위해 앱에 내 명령을 보내는 것이 안전하다는 것을 알고 있습니까?

답변

1

내가 아는 한, 기본 방법이 없습니다.

그러나 유용한 방법 중 하나는 시계 앱에 - (void)applicationDidBecomeActive:(UIApplication *)application;- (void)applicationWillResignActive:(UIApplication *)application;의 메시지를 보내 시계 앱에 iOS 앱을 "원격 제어"할 수 있는지 여부를 알리는 것입니다.

그래서 당신 WatchKit 응용 프로그램에, 당신은 당신의 iOS 앱의 상태 ( isPhoneAppActive 같은)을 저장하는 부울 변수를 선언해야하며, iOS 앱에서이 변수의 새 값으로 WatchConnectivity 프레임 워크를 사용하여 메시지를 보냅니다. applicationWillResignActivefalse 값을 보내고 applicationDidBecomeActive 값은 true입니다. 그런 다음 isPhoneAppActive == true 인 경우 시계 앱에서 '리모콘'기능 만 호출하면됩니다.

물론 약간의 변경으로 동일한 접근법을 사용할 수 있습니다. 예를 들어 휴대 전화 앱에 많은 기능이있어 Watch 앱을 사용하지 않고 백그라운드 모드로 들어가거나 나오지 않는 경우 iOS 앱 내에 애플리케이션 상태를 저장하는 것이 더 적절합니다. WatchConnectivity 프레임 워크를 사용하여 메시지를 보내고 iOS에서 회신하여 애플리케이션 상태를 되돌려 보내서 시계 앱에서 저장된 상태를 확인합니다.

+0

방금 ​​시도했지만 모든 것이 작동했습니다. 빠른 질문, WCSession의 isReachable 속성도 동일한 작업을 수행합니까? – SolidSnake4444

+0

아니요, 'isReachable'은 iOS 앱이 백그라운드에서 실행중인 경우에도 true를 반환합니다. –