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

标签 ios objective-c iphone watchkit watchos-3

我想制作一个远程控制类型的 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/

相关文章:

ios - 终止在后台运行的应用程序

iphone - 雪豹的ios5崩溃,但Lion os可以

iphone - 从 NSOperation 中取消 NSOperationQueue

ios - 如何从 swift(iOS) 重定向 Skype 应用程序

iphone - 如何将并排放置的两个图像一起缩放?

objective-c - NSMutableArray 和副本

iphone - UIView 未显示在 UIScrollView 中

iphone - 如何在应用程序退出时清除 SQLite 数据库?

objective-c - 从 ios 设置中设置默认值

c++ - m 和 mm 文件扩展名的困境