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

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

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

2)是否可以在iWatch上创buildlogin屏幕(从文本字段获取用户input)

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

4)是否可以从iWatch应用程序读取iPhone应用程序的数据库(如iPhone应用程序中的SQL Lite数据库)

5)如何将字典从iPhone应用程序转移到iWatch应用程序。 分享任何示例PLZ。

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

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

2)是否可以在iWatch上创buildlogin屏幕(从文本字段获取用户input)

NO,TextOS字段在WatchOS2中不可用。

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

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

使用watchOS 2时,您需要将iPhone上的供应商ID和广告ID同步到Watch并在此处使用。 而且您需要维护供应商ID和广告ID最新。

4)是否可以从iWatch应用程序读取iPhone应用程序的数据库(如iPhone应用程序中的SQL Lite数据库)

这是可能的WatchKit但引入WatchConnectivity框架基于应用程序组的基于公共容器已被限制。我确定为UserDefualts但尚未testing的文件。

5)如何将字典从iPhone应用程序转移到iWatch应用程序。 分享任何示例PLZ。

有两种方式来执行这些事情:

使用TransferUserInfo

使用这种方法,Watch每次都会收到字典,这意味着如果Watch处于非活动状态,并且iphone在那段时间内发送了3个字典,每当watch激活时,它将通过多个委托方法的调用来接收所有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:错误:

在这种情况下,Device将在激活时发送最新的上下文以观察。 这意味着让我们说,如果你已经发送了三个信息,那么当观察被激活时,它将只接收最新的一个,而不是以前在委托方法 – -(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]; } } }