使用WatchOS2
WatchConnectivity
你可以从手表的应用程序将数据发送回父应用程序,然后尝试启动从父应用程序调用。这里有一个例子:
//App Delegate in iOS Parent App
#pragma mark Watch Kit Data Sharing
-(void)initializeWatchKit{
if ([WCSession isSupported]){
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
}
}
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message{
DLog(@"%@", message);
[self callRestaurantWithNumber:[NSString formattedPhoneNumber:[message valueForKey:@"phone_number"]]];
}
-(void)callRestaurantWithNumber:(NSString *)formattedPhoneNumber{
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",
formattedPhoneNumber]]];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self initializeWatchKit];
return YES;
}
现在watchKit扩展中,你可以将数据发送回这样的父应用程序:
override func willActivate() {
super.willActivate()
if WCSession.isSupported() {
let defaultSession = WCSession.defaultSession()
defaultSession.delegate = self
defaultSession.activateSession()
if defaultSession.reachable == true {
let phoneNumberDict = [ "phone_number": "123-456-7890"]
defaultSession.sendMessage(phoneNumberDict, replyHandler: nil, errorHandler: { (error) -> Void in
print("THERE WAS AN ERROR SENDING DATA TO THE IOS APP: \(error.localizedDescription)")
})
}
}
}
但是我这种方法遇到的一个限制是父母应用程序需要开放以实际接收数据并进行呼叫。该文档似乎指出,将应用程序从手表发送到ios父应用程序时将在后台打开。然而,在我的测试中,在真实设备(手表和iphone)和模拟器上,父应用程序仅在父级ios应用程序打开并预先登录时才接收数据。即使当ios父应用程序处于后台状态时,它似乎仍不会启动该呼叫。我在watch os2
和iOS 9.0.2
上运行这个。
从另一个帖子,似乎也遇到了同样的问题。 Another watchKit SO post
链接到苹果的文档太: Apple Doc sendMessage: