WatchOS 3 - 如何判断父应用程序是否位于前台?

时间:2017-09-14 14:47:20

标签: ios objective-c iphone watchkit watch-os-3

我想创建一个遥控类型的watchkit应用程序,我可以通过手表在我的父应用程序中触发屏幕上的某些内容。当手表应用程序启动时,我会显示一个标签,说明它正在与应用程序连接。

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

我已经尝试查询[UIApplication sharedApplication] .applicationState但是这总是在调试期间返回nil并发出警告,声明UIApplication只能在主线程上调用。

我也读过一个类似于openparentapplication的函数是这样做的,但是我认为这个函数已经被弃用了。截至WatchOS 2或者3。

我怎么能告诉手表应用程序在前台,所以我知道将我的命令发送到应用程序以更新其UI中的元素是安全的吗?

1 个答案:

答案 0 :(得分:2)

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

然而,一种可行的方法是从- (void)applicationDidBecomeActive:(UIApplication *)application;- (void)applicationWillResignActive:(UIApplication *)application;向Watch应用程序发送消息,以通知手表应用程序是否可以"远程控制" iOS应用程序与否。

因此,在您的WatchKit应用中,您应该声明一个布尔变量来存储iOS应用的状态(类似isPhoneAppActive),并使用WatchConnectivity从iOS应用发送消息框架与此变量的新值。从applicationWillResignActive发送false值,而applicationDidBecomeActive发送true。然后只打电话给你的遥控器"来自Watch应用的功能isPhoneAppActive == true

当然,您可以使用相同的方法稍作修改。例如,如果您的手机应用程序具有许多其他功能,因此在没有使用Watch应用程序的情况下它可能经常进入和退出后台模式,将应用程序状态存储在iOS应用程序中并在需要时更有意义,通过使用WatchConnectivity框架发送消息并在iOS发送回应用程序状态的回复中,从监视应用程序检查此存储状态。