使用 Watch 连接框架将数据从 iPhone 传输到 iWatch

Data transfering from iPhone to iWatch with Watch connectivity framework

我想问一个关于手表连接的问题。

1) iWatch 应用程序打开时是否可以从iPhone 读取数据。我不想等待打开 iPhone 应用程序将数据传输到 iWatch。

2) 是否可以在 iWatch 上创建登录屏幕(从文本字段获取用户输入)

3) iWatch 有设备令牌和供应商 ID?如何从 iWatch 获取这些信息?

4) 是否可以从 iWatch 应用程序

读取 iPhone 应用程序的数据库(如 sql 应用程序上的 sql 精简版数据库)

5) 如何将词典从 iPhone 应用程序传输到 iWatch 应用程序。请分享任何示例。

1) iWatch 应用程序打开时是否可以从iPhone 读取数据。我不想等待打开 iPhone 应用程序,以便 运行 将数据传输到 iWatch。

是的,使用任何后台方法(transferUserInfo:transferCurrentComplicationUserInfo:transferFile:updateApplicationContext:infoToSend)您可以唤醒 iPhone 应用程序并完成任务.反之亦然,必须打开 Watch 应用程序。

2) 是否可以在 iWatch 上创建登录屏幕(从文本字段获取用户输入)

不,文本字段在 WatchOS2 中不可用。

3) iWatch 有设备令牌和供应商 ID?如何从 iWatch 获取这些信息?

对于 watchOS 1,供应商 ID 和广告 ID 实际上在 iPhone 上,因为 WatchKit 扩展本身 运行 在 iPhone 上。

使用 watchOS 2,您需要将供应商 ID 和广告 ID 从 iPhone 同步到手表并在那里使用。 并且您需要保持供应商 ID 和广告 ID 为最新。

4) 是否可以从 iWatch 应用程序[读取 iPhone 应用程序的数据库(如 iPhone 应用程序上的 sql 精简版数据库) =18=]

在 WatchKit 中是可能的,但随着 WatchConnectivity Framework 的引入,基于应用程序组的通用容器已经 restricted.I 我确信 UserDefualts 但尚未测试文件。

5) 如何将 运行 字典从 iPhone 应用转移到 iWatch 应用。请分享任何示例。

有两种方法可以执行这些操作:

使用 T运行sferUserInfo

使用此方法,Watch 每次都会收到字典,这意味着如果 Watch 处于非活动状态并且 iphone 在该时间段内发送 3 个字典,每当手表激活时,它将通过多次调用接收所有 3 个字典委托方法 - - (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *, id> *)userInfo 在观察端。

-(void)sendDictionaryToWatch:(NSDictionary*)infoToSend{
        if([WCSession isSupported]){
            WCSession *aDefaultSession           = [WCSession defaultSession];
            aDefaultSession.delegate  = self;
            if([aDefaultSession isPaired] && [aDefaultSession isWatchAppInstalled]){
                [aDefaultSession activateSession];
                [aDefaultSession transferUserInfo:infoToSend];
            }
        }
    }

使用updateApplicationContext:error:

在这种情况下,设备将在激活时将最新的上下文发送到手表。这意味着如果你已经发送了三个信息来回发送,那么当 Watch 被激活时,它只会收到最新的信息,而不是委托方法中的以前的信息 - -(void)session:(WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext

-(void)sendDictionaryToWatch:(NSDictionary*)infoToSend{
    if([WCSession isSupported]){
        WCSession *aDefaultSession           = [WCSession defaultSession];
        aDefaultSession.delegate  = self;
        if([aDefaultSession isPaired] && [aDefaultSession isWatchAppInstalled]){
            [aDefaultSession activateSession];
            [aDefaultSession updateApplicationContext:infoToSend error:nil];
        }
    }
}