2016-08-01 60 views
1

我正在开发Apple Watch应用程序。当iPhone发生特定事件时,我可以从iPhone向Apple Watch发送数据。但是,我希望在开始运行时观看数据。我应该如何处理这个问题?什么是最有效的方法呢?WatchOS从iPhone获取数据

回答

4

WatchConnectivity

首先,都应该相互通信的两个类(iOS和watchOS)需要符合的<WCSessionDelegate>#importWatchConnectivity框架

要发送的数据,你需要检查你的设备是否能够发送数据

if ([WCSession isSupported]) { 
     WCSession *session = [WCSession defaultSession]; 
     session.delegate = self; 
     [session activateSession]; 
     NSLog(@"WCSession is supported"); 
} 

然后,如果你想使用“交互式消息传递”(森dMessage API)的,你需要看看其他设备可达第一:

if ([[WCSession defaultSession] isReachable]) { 
    //Here is where you will send you data 
} 

的“后台操作”的API不要求对应设备是在一次调用API WCSession点到达。

您有几种选择,当涉及到你的应用程序之间传输数据,在Apple Documentation他们是这样描述的:

  • 使用updateApplicationContext:error:方法进行交流只有最近的状态信息发送到对方。当对方醒来时,它可以使用这些信息来更新自己的状态并保持同步。使用此方法发送新字典会覆盖以前的字典。

  • 使用sendMessage:replyHandler:errorHandler:sendMessageData:replyHandler:errorHandler:方法立即传输数据到对方。当您的iOS应用和WatchKit扩展都处于活动状态时,这些方法可用于即时通信。

  • 使用transferUserInfo:方法在后台传输数据字典。您发送的字典排队等待交付给对方,并在当前应用程序被暂停或终止时继续传输。使用transferFile:metadata:方法在后台传输文件。如果您想发送的不仅仅是一个简单的值字典,请使用此方法。例如,使用此方法发送图像或基于文件的文档。

我会给你一个例子,如何发送/接收数据与应用上下文

发送数据:

WCSession *session = [WCSession defaultSession]; 
NSError *error; 

[session updateApplicationContext:@{@"firstItem": @"item1", @"secondItem":[NSNumber numberWithInt:2]} error:&error]; 

接收数据:

- (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext { 

    NSLog(@"%@", applicationContext); 


    NSString *item1 = [applicationContext objectForKey:@"firstItem"]; 
    int item2 = [[applicationContext objectForKey:@"secondItem"] intValue]; 
} 

更多关于WatchConnectivity的信息我真的推荐看WWDC2015 session video并阅读Apple Documentation on WatchConnectivity

相关问题