我想制作一个远程控制类型的 watchkit 应用程序,我可以通过 watch 在我的父应用程序的屏幕上触发某些事情。当 watch 应用程序启动时,我会显示一个标签,说明它正在与应用程序连接。
我创建了一个 WCSession 并向应用程序发送一条消息,以查看应用程序是否在前台。事实证明,即使应用程序在后台,它仍然会发回响应。因此,我的 watch 应用程序认为该应用程序已准备就绪。
我试过查询 [UIApplication sharedApplication].applicationState 但这总是返回为 nil 并且在调试期间出现警告,说明 UIApplication 只能在主线程上调用。
我还阅读了一个类似于 openparentapplication 的功能是这样做的方法,但我相信从 WatchOS 2 或 3 开始不推荐使用。
我怎样才能告诉 watch 应用程序在前台,以便我知道将我的命令发送到应用程序以更新其 UI 中的元素是安全的?
最佳答案
据我所知,没有默认方法。
但是,一种可行的方法是从 - (void)applicationDidBecomeActive:(UIApplication *)application;
向 Watch 应用发送消息。和 - (void)applicationWillResignActive:(UIApplication *)application;
通知 watch 应用程序是否可以“远程控制”iOS 应用程序。
所以在你的WatchKit
应用程序,您应该声明一个 bool 变量来存储您的 iOS 应用程序的状态(类似于 isPhoneAppActive
)并从 iOS 应用程序使用 WatchConnectivity
发送消息具有此变量的新值的框架。来自 applicationWillResignActive
发送 false
值,而来自 applicationDidBecomeActive
发送true
.然后仅在 isPhoneAppActive == true
时从 Watch 应用程序调用您的“远程控制”功能。 .
当然,您可以使用相同的方法,只需稍作改动。例如,如果您的手机应用程序具有许多其他功能,因此它可能经常在不使用 Watch 应用程序的情况下进入和退出后台模式,那么将应用程序状态存储在 iOS 应用程序中以及在需要时会更有意义,通过使用 WatchConnectivity
发送消息从 watch 应用程序检查此存储状态框架并在来自 iOS 的回复中发回应用程序状态。
关于ios - WatchOS 3 - 如何判断父应用程序是否在前台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46222133/