通过Watch连接框架将数据从iPhone传输到iWatch

时间:2016-04-14 08:30:13

标签: ios watchkit data-transfer watchconnectivity

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

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

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

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

4)是否可以从iWatch应用程序中读取iPhone应用程序的数据库(如iPhone应用程序上的sql lite db)

5)如何将字典从iPhone应用程序传输到iWatch应用程序。分享任何例子plz。

1 个答案:

答案 0 :(得分:3)

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

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

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

否,WatchOS2中没有文本字段。

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

使用watchOS 1时,供应商ID和广告ID实际上在iPhone上,因为WatchKit扩展程序本身在iPhone上运行。

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

4)是否可以从iWatch应用程序中读取iPhone应用程序的数据库(如iPhone应用程序上的sql lite db)

在WatchKit中有可能但是随着WatchConnectivity Framework的引入,基于App组的公共容器受到限制。我确信UserDefualts但尚未测试Files。

5)如何将字典从iPhone应用程序传输到iWatch应用程序。分享任何例子plz。

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

使用TransferUserInfo

使用这种方法,Watch每次都会收到字典,这意味着如果Watch处于非活动状态且iphone在该时间段内发送3个字典,每当监视激活时,它将通过委托方法的多次调用接收所有3个字典 - {{ 1}}在观看方面。

- (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *, id> *)userInfo

使用updateApplicationContext:错误:

在这种情况下,Device会在激活时发送最新的Context to Watch。这意味着,如果您已经发送了三个Info,那么当Watch被激活时,它将只接收最新的一个,而不是之前的委托方法 - -(void)sendDictionaryToWatch:(NSDictionary*)infoToSend{ if([WCSession isSupported]){ WCSession *aDefaultSession = [WCSession defaultSession]; aDefaultSession.delegate = self; if([aDefaultSession isPaired] && [aDefaultSession isWatchAppInstalled]){ [aDefaultSession activateSession]; [aDefaultSession transferUserInfo:infoToSend]; } } }

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