我想问一个关于手表连接的问题。
1)当iWatch应用程序打开时,是否可以从iPhone读取数据。我不想等到打开iPhone应用程序将数据传输到iWatch。
2)是否可以在iWatch上创建登录界面(从文本字段获取用户输入)
3)iWatch有设备令牌和供应商ID吗?如何从iWatch获取这些信息?
4)是否可以从iWatch应用程序中读取iPhone应用程序的数据库(如iPhone应用程序上的sql lite db)
5)如何将字典从iPhone应用程序传输到iWatch应用程序。分享任何例子plz。
答案 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