You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WatchKit:手表Altimeter返回iPhone高度,如何强制获取手表自身海拔

强制Apple Watch使用自身海拔传感器的解决方案

核心逻辑

当Watch App与配对iPhone连接时,系统默认会优先调用精度更高的iPhone传感器返回海拔数据,你可以通过以下配置强制使用Watch自身的气压传感器:

1. 调整代码运行位置

你提供的现有CMAltimeter调用逻辑完全可用,无需修改,只需要确保这段代码只在WatchOS应用的独立目标中编译运行,不要放在iOS端代码、跨端共享逻辑中执行,否则会默认读取当前运行设备的海拔数据。
你可以用编译宏限定代码仅在Watch端生效:

#if os(watchOS)
func startAltimeter() {
    if CMAltimeter.isRelativeAltitudeAvailable() {
        switch CMAltimeter.authorizationStatus() {
        case .notDetermined: 
            print("*******************Motion permission is not determined")
        case .restricted: 
            fatalError("Authorization restricted!")
        case .denied: 
            fatalError("Authorization denied!")
        case .authorized: 
            print("Authorized!")
        @unknown default:
            fatalError("Unknown Authorization Status")
        }
        self.altimeter.startRelativeAltitudeUpdates(to: OperationQueue.main) {(data,error) in
            DispatchQueue.main.async {
                self.relativeAlt = data?.relativeAltitude.doubleValue ?? 0.0
                print("relative alttitude = \(self.relativeAlt) m")
            }
        }
    } else {
        DispatchQueue.main.async {
            self.relativeAlt = -99
        }
    }
}
#endif

2. 修改Watch App配置

对Watch应用的target做以下修改:

  • 打开Watch端Info.plist,添加WKApplicationIsIndependent字段,布尔值设为YES,标记应用为独立Watch应用,关闭系统默认的iPhone传感器优先策略
  • 在同一份Info.plist的UIRequiredDeviceCapabilities数组中加入altimeter字段,强制要求系统调用Watch自身的海拔传感器,禁止回退到iPhone的传感器数据
  • 单独在Watch端Info.plist中添加NSMotionUsageDescription字段,填写运动权限申请描述,不要依赖iPhone端的权限同步
  • 进入Watch target的Signing & Capabilities设置页,开启Motion & Fitness权限,若需要后台获取海拔数据可以同时开启后台刷新权限

3. 效果验证

你可以通过以下方式确认配置生效:

将配对的iPhone放置在固定高度位置,携带Apple Watch上下移动,观察打印的相对海拔数值是否跟随手表的位置变化同步变动,如果数值同步变动则说明已经在使用手表自身的海拔传感器。


内容的提问来源于stack exchange,提问作者RawMean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:27:00