使用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: