WatchOS 3 - 如何判断父应用是否在前台?

问题描述:

我想做一个遥控类型的watchkit应用程序,我可以通过手表在我的父应用程序的屏幕上触发某些事情。当手表应用程序启动时,我会显示一个标签,指出它正在与应用程序连接。WatchOS 3 - 如何判断父应用是否在前台?

我创建了一个WCSession并发送消息给应用程序以查看应用程序是否在前台。事实证明,即使该应用程序在后台,它仍然会发送回应。因此,我的手表应用认为该应用已准备就绪。

我试过查询[UIApplication sharedApplication] .applicationState,但是这总是回到nil,并在调试过程中发出警告,声明只能在主线程上调用UIApplication。

我也看了类似openparentapplication一个功能是做到这一点,但已被否决,我相信作为WatchOS 2或3

我怎么能告诉该应用程序是在腕表前景,所以我知道它的安全将我的命令发送到应用程序来更新它的UI中的元素?

据我所知,这里没有默认的方法。

但是,一种可行的方法是向- (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。 –