【问题标题】:WatchOS 3 - How does one tell if the parent app is in the foreground?WatchOS 3 - 如何判断父应用程序是否在前台?
【发布时间】:2018-02-23 14:48:06
【问题描述】:

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

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

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

我还阅读了一个类似于 openparentapplication 的函数是这样做的方法,但我相信从 WatchOS 2 或 3 开始不推荐使用。

我怎样才能告诉手表应用程序在前台,以便我知道向应用程序发送命令以更新其 UI 中的元素是安全的?

【问题讨论】:

    标签: ios objective-c iphone watchkit watchos-3


    【解决方案1】:

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

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

    因此,在您的 WatchKit 应用程序中,您应该声明一个布尔变量来存储您的 iOS 应用程序的状态(类似于 isPhoneAppActive)并从 iOS 应用程序使用 WatchConnectivity 框架发送消息,新值为这个变量。从applicationWillResignActive 发送false 值,而从applicationDidBecomeActive 发送true。然后只有在 isPhoneAppActive == true 时才从 Watch 应用调用您的“远程控制”功能。

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

    【讨论】:

    • 刚刚尝试过,一切正常!快速提问,WCSession 的 isReachable 属性是否也能完成同样的任务?
    • 不,isReachable 会返回 true,即使 iOS 应用程序正在后台运行。
    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 2023-04-06
    • 2010-12-01
    • 1970-01-01
    • 2011-03-09
    • 2021-10-15
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多