2

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

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

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

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

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

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

4

1 回答 1

3

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

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

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 但尚未测试文件。

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

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

使用 TransferUserInfo

使用此方法,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。这意味着假设如果您背靠背发送了三个信息,那么当 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];
        }
    }
}
于 2016-04-15T11:44:27.287 回答