2017-09-14 57 views
1

我想做一個遙控類型的watchkit應用程序,我可以通過手錶在我的父應用程序的屏幕上觸發某些事情。當手表應用程序啓動時,我會顯示一個標籤,指出它正在與應用程序連接。WatchOS 3 - 如何判斷父應用是否在前臺?

我創建了一個WCSession併發送消息給應用程序以查看應用程序是否在前臺。事實證明,即使該應用程序在後臺,它仍然會發送回應。因此,我的手錶應用認爲該應用已準備就緒。

我試過查詢[UIApplication sharedApplication] .applicationState,但是這總是回到nil,並在調試過程中發出警告,聲明只能在主線程上調用UIApplication。

我也看了類似openparentapplication一個功能是做到這一點,但已被否決,我相信作爲WatchOS 2或3

我怎麼能告訴該應用程序是在腕錶前景,所以我知道它的安全將我的命令發送到應用程序來更新它的UI中的元素?

回答

1

據我所知,這裏沒有默認的方法。

但是,一種可行的方法是向- (void)applicationDidBecomeActive:(UIApplication *)application;- (void)applicationWillResignActive:(UIApplication *)application;發送一條消息給Watch應用程序,以指示Watch應用程序是否可以「遠程控制」iOS應用程序。

因此,在你WatchKit應用程序,你應該聲明一個布爾變量來存儲您的iOS應用的狀態(類似isPhoneAppActive),並從iOS應用程序中使用這個變量的新值WatchConnectivity框架發送消息。從applicationWillResignActive發送一個false的值,而從applicationDidBecomeActive發送true。然後,只要從Watch應用程序調用您的「遙控器」功能,如果isPhoneAppActive == true

當然,您可以使用相同的方法進行輕微的更改。例如,如果您的手機應用程序具有許多其他功能,因此如果沒有使用Watch應用程序,它可能會經常進入和退出後臺模式,將應用程序狀態存儲在iOS應用程序中並在需要時更有意義,通過使用WatchConnectivity框架發送消息並在iOS的回覆中發送迴應用程序狀態,從Watch應用程序中檢查此存儲狀態。

+0

剛試過這個,一切正常!快速的問題,WCSession的isReachable屬性是否也完成了相同的任務? – SolidSnake4444

+0

不,即使iOS應用程序在後臺運行,「isReachable」也會返回true。 –