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

健身追踪APP:如何判断Live Activity对用户可见(屏幕点亮)

健身追踪应用Live Activity省电更新方案

你可以通过以下手段判断是否需要更新Live Activity,在保证用户体验的同时降低电池消耗:

  • 跟踪屏幕点亮状态
    借助系统通知监听屏幕的开启/关闭状态,在应用内维护全局变量记录当前屏幕状态:

    // 注册屏幕状态监听通知
    NotificationCenter.default.addObserver(forName: UIScreen.didTurnOnNotification, object: nil, queue: .main) { _ in
        self.isScreenOn = true
    }
    
    NotificationCenter.default.addObserver(forName: UIScreen.didTurnOffNotification, object: nil, queue: .main) { _ in
        self.isScreenOn = false
    }
    

    注:即使开启「始终显示」模式,屏幕点亮状态也会返回true,完全匹配你的需求。

  • 判断设备是否处于口袋/非可见场景
    结合Core Motion框架的运动数据,检测设备是否处于静止且屏幕朝下的状态(对应口袋场景的典型特征):

    1. 初始化运动管理器并开启加速度计检测:
    let motionManager = CMMotionManager()
    
    func startMotionDetection() {
        guard motionManager.isAccelerometerAvailable else { return }
        motionManager.accelerometerUpdateInterval = 1.0 // 每秒检测一次,平衡精度与功耗
        motionManager.startAccelerometerUpdates(to: .main) { data, error in
            guard let accelData = data else { return }
            // 检测设备是否静止(加速度波动小)且屏幕朝下(z轴加速度接近-1g,可根据设备朝向微调阈值)
            let isStationary = abs(accelData.acceleration.x) < 0.1 && abs(accelData.acceleration.y) < 0.1
            let isFaceDown = accelData.acceleration.z < -0.8
            self.isInPocket = isStationary && isFaceDown
        }
    }
    
    1. 可辅助使用距离传感器(UIDevice.proximityState):当设备靠近物体时该属性返回true,但它主要针对通话场景,建议和运动数据结合使用以减少误判。
  • 结合Live Activity活跃状态做最终判断
    先通过Activity.activities获取当前活跃的Live Activity,仅当以下三个条件同时满足时,才执行每秒更新统计数据和Live Activity的操作:

    • 存在活跃的Live Activity
    • 屏幕处于点亮状态(isScreenOn == true)
    • 设备不在口袋中(isInPocket == false)

额外省电优化建议:

  • 无需更新时,直接暂停统计数据计算逻辑,而非仅停止Live Activity更新
  • 利用ActivityKit的update(_:)批量更新能力,避免不必要的频繁调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:40:06