2

我想在我的 watchOS 应用程序中使用新的“enableWaterLock”功能,但我无法让它工作。

这是我的代码:

@IBAction func lockScreen() {
    if #available(watchOSApplicationExtension 4.0, *) {
        WKExtension.shared().enableWaterLock()
    }
}

如果满足该功能的所有条件,则从添加到 willActivate() 函数中的菜单按钮调用 lockScreen()。

    //Screen Lock
    if #available(watchOSApplicationExtension 4.0, *) {
        if WKInterfaceDevice.current().waterResistanceRating == .wr50 {
            addMenuItem(with:.block, title: "Lock Screen", action: #selector(lockScreen))
        }
    }

在文档中说:

使用水锁时适用以下规则:

  • 您只能在活动锻炼或定位会话期间应用程序在前台运行时启用水锁。
  • 应用程序必须在受支持的设备上运行(WKInterfaceDevice 对象的 waterResistanceRating 属性必须设置为 wr50)。
  • 水锁保持活动状态,直到用户解锁它。您无法以编程方式解锁手表。

所以我猜我的手表应用程序不是主动锻炼或定位会话。这两者之一需要什么?我的应用程序使用 locationManager,但这显然还不够。

4

1 回答 1

1

您需要创建一个 HKWorkoutSession 对象

let workoutConfiguration = HKWorkoutConfiguration()
workoutConfiguration.activityType = HKWorkoutActivityType.swimming
workoutConfiguration.swimmingLocationType = HKWorkoutSwimmingLocationType.pool
workoutConfiguration.lapLength = HKQuantity(unit: .yard(), doubleValue: 25)

do {
    var workoutSession = try HKWorkoutSession(configuration: workoutConfiguration)
    workoutSession?.delegate = self         
    healthStore.start(workoutSession!)
} catch {
    // ...
}

您可以在 6:23 观看来自 WWDC 的 Apple 示例,以查看 Apple 创建锻炼会话和启用水锁的完整示例。

于 2017-12-18T22:59:11.120 回答