使用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]; } } }