我知道,在Watch应用中,我们可以使用openParentApplication(userInfo:reply)
唤醒主机应用,但是有一种方法可以在调用openParentApplication
之前知道主机应用是否正在运行吗?
谢谢!
答案 0 :(得分:0)
您可以跟踪NSExtensionContext
notifications,但在手表应用启动时,您不知道主机应用的运行状态。
您可以在NSUserDefaults
中放置一个标记,并让主机应用在applicationDelegate的applicationWilllEnterForeground
,applicationDidEnterBackground
中更改该标记,依此类推。然后按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.
}
希望这会有所帮助。