【问题标题】:Using Core Location in Apple WatchKit在 Apple WatchKit 中使用核心位置
【发布时间】:2014-12-11 10:22:09
【问题描述】:

我目前正在开发一个 Apple Watch 扩展程序。有人知道当前位置是由 iPhone 还是 Watch 本身提供的? 我找不到有关此的任何信息,我需要画一个指南针指向手表所指的位置。

【问题讨论】:

    标签: ios watchkit apple-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 子集。
      猜你喜欢
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 2011-07-27
      • 2014-08-27
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多