在 Apple WatchKit 中使用核心位置
Posted
技术标签:
【中文标题】在 Apple WatchKit 中使用核心位置【英文标题】:Using Core Location in Apple WatchKit 【发布时间】:2014-12-11 10:22:09 【问题描述】:我目前正在开发一个 Apple Watch 扩展程序。有人知道当前位置是由 iPhone 还是 Watch 本身提供的? 我找不到有关此的任何信息,我需要画一个指南针指向手表所指的位置。
【问题讨论】:
【参考方案1】:为了做你想做的事,你不需要 CoreLocation,你只需要一个磁力计。
AFAIK Apple Watch 没有内置的。
它拥有的传感器是……
加速度计 陀螺仪 心率传感器 气压计虽然没有磁力计。
【讨论】:
watchkit 扩展在 iphone 内部运行,因此您可以使用常规方式获取位置。 @PeterSmith 他们不想要这个位置。他们想要北方的方向。与手表方向相比,我认为没有办法检测手机方向。 @Fogmeister 是的,你说的很对,我没有分析他要解决什么问题,只是回答了问题。手表需要一个内部指南针,我还没有遇到过。我相信手表所能做的最好的事情就是知道手机指向的方向。 此页面的“地图”部分显示了一个标题箭头,这让我想知道是否可能有一个并且他们还没有暴露它:developer.apple.com/watch/human-interface-guidelines/… @gohnjanotis 这不是一个方向箭头。这是一个图形,显示了它们在文本中的含义。手表没有指南针。【参考方案2】:根据Apple's Dev Documentation:
执行任何长时间运行的任务的最佳解决方案是让您的 ios 应用执行该任务。例如,不要在 WatchKit 扩展中启动定位服务,而是在 iOS 应用中启动它。您的 iOS 应用程序可以收集所需的数据并将其放入共享的应用程序组中,以便您的扩展程序以后可以访问它。使用 openParentApplication:reply: 方法来启动任务并接收回复或使用共享组容器在您的 iOS 应用程序和 WatchKit 扩展之间传达详细信息。有关如何处理您的 iOS 应用和 WatchKit 扩展之间的通信的信息,请参阅与您的包含的 iOS 应用直接通信。
附:我正在开发类似的应用程序。
【讨论】:
【参考方案3】:您不能从 watchkit 扩展中使用 CoreLocation。但是,您可以使用 api 打开父应用程序(在后台)并询问您的父 api 信息。这个api真的很好,因为你可以用它来回复,这样你就可以很容易地得到信息:
+ (BOOL)openParentApplication:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo, NSError *error)) reply; // launches containing iOS application on the phone
【讨论】:
CoreLocation 可以从 WatchKit 扩展中使用,但是它不能提示权限并继承容器应用的位置权限。openParentApplication:
很难使用您描述的方式,因为响应需要是同步的,但 CoreLocation 是一个异步 API。
@Sam openParentApplication:reply:
是异步的——您的应用可以随时调用回调。
@Sidncious 对,它是异步的。不确定我当时是否完全理解了 Beta 2 的变化 - 抱歉。
我的 watchOS 1 应用使用 CoreLocation,因为它在 iPhone 上运行。所以我真的不知道你从哪里得到你的信息。还支持在 watchOS 2 上原生运行 CoreLocation 子集。以上是关于在 Apple WatchKit 中使用核心位置的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在实际 Apple Watch 设备上运行 WatchKit 应用程序?