【问题标题】:WatchOS fetching data from iPhoneWatchOS 从 iPhone 获取数据
【发布时间】:2016-08-01 08:16:49
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c swift apple-watch watchos-2


    【解决方案1】:

    WatchConnectivity

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

    在您可以发送数据之前,您需要检查您的设备是否能够发送数据

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

    然后,如果您希望使用“交互式消息传递”(sendMessage API),您需要先查看其他设备是否可以访问:

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

    “后台操作”API 不要求对方设备在您调用 WCSession API 的时间点是可访问的。

    在应用程序之间传输数据时,您有多种选择,Apple Documentation 中对它们的描述如下:

    • 使用updateApplicationContext:error: 方法仅将最新状态信息传达给对方。当对方醒来时,它可以使用此信息来更新自己的状态并保持同步。使用此方法发送新字典会覆盖以前的字典。

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

    • 使用transferUserInfo: 方法在后台传输数据字典。您发送的字典会排队等待发送给对方,并且在当前应用暂停或终止时继续传输。

    • 使用transferFile:metadata:方法在后台传输文件。如果您想要发送的不仅仅是简单的值字典,请使用此方法。例如,使用此方法发送图像或基于文件的文档。

    我会给你一个例子,如何使用 Application Context

    发送/接收数据

    发送数据:

    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

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 2021-07-04
      • 1970-01-01
      • 2021-12-22
      • 2010-12-03
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      相关资源
      最近更新 更多