是否可以从Apple Watch应用程序了解主机应用程序是否在前台?

时间:2015-05-04 18:29:34

标签: ios watchkit apple-watch

我知道,在Watch应用中,我们可以使用openParentApplication(userInfo:reply)唤醒主机应用,但是有一种方法可以在调用openParentApplication之前知道主机应用是否正在运行吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以跟踪NSExtensionContext notifications,但在手表应用启动时,您不知道主机应用的运行状态。

您可以在NSUserDefaults中放置一个标记,并让主机应用在applicationDelegate的applicationWilllEnterForegroundapplicationDidEnterBackground中更改该标记,依此类推。然后按App Extension Programming Guide

中所述分享默认值

如果这似乎是一种使用NSUserDefaults的奇怪方式,您需要对达尔文通知做一些事情。 MMWormhole建立在达尔文的基础之上,对很多人来说都很有用。

简短回答:选择主机应用与手表之间的通信方式,不依赖于openParentApplication&回复,然后将主机应用程序中继状态信息发送到监视应用程序。

答案 1 :(得分:0)

openParentApplication不会让您的iPhone应用程序进入活动状态。因此,一种简单的方法是调用openParentApplication。在该方法中,只需将以下bool放入与reply()一起返回的NSDictionary中即可:

   ( application.applicationState == UIApplicationStateActive )

答案 2 :(得分:0)

您可以在Watch控制器中调用openParentApplication:reply:方法向该应用发送请求并收到回复。

当您调用openParentApplication:reply:方法时,iOS会在后台启动或唤醒包含的iOS应用,并调用其应用委托的application:handleWatchKitExtensionRequest:reply:方法。应用程序委托使用提供的字典执行请求,然后返回对WatchKit扩展的回复。您可以阅读更多详细信息here

在AppDelegate

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {
    let state = UIApplication.applicationState
    let replyDict = ["appState" : state]
    reply(replyDict)
}

在WatchController中

WKInterfaceController.openParentApplication(dictionary) {
        (replyDict, error) -> Void in
    //You will get the replyDict here, which contains application state.
}

希望这会有所帮助。