Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当应用程序处于后台时,如何查询HealthKit(香港健身)更新?_Ios_Swift_Background Process_Appdelegate_Healthkit - Fatal编程技术网

Ios 当应用程序处于后台时,如何查询HealthKit(香港健身)更新?

Ios 当应用程序处于后台时,如何查询HealthKit(香港健身)更新?,ios,swift,background-process,appdelegate,healthkit,Ios,Swift,Background Process,Appdelegate,Healthkit,编辑以添加我的更新代码,该代码基于WWDC 2016的“从Healthkit talk中获得最大收益”,但除非我打开应用程序,否则我仍然无法获得新训练的打印声明 在苹果手表上保存了新的训练后,我正在iPhone上观察新的训练。下面是我正在运行的代码didfishLaunching。为了测试它,我在iPhone应用程序上运行Xcode…构建并运行,然后导航回主屏幕。然后在我的手表上开始并保存训练,但是我的打印语句没有在控制台中打印。我错过了什么 func startObservingNewWork

编辑以添加我的更新代码,该代码基于WWDC 2016的“从Healthkit talk中获得最大收益”,但除非我打开应用程序,否则我仍然无法获得新训练的打印声明

在苹果手表上保存了新的训练后,我正在iPhone上观察新的训练。下面是我正在运行的代码
didfishLaunching
。为了测试它,我在iPhone应用程序上运行Xcode…构建并运行,然后导航回主屏幕。然后在我的手表上开始并保存训练,但是我的打印语句没有在控制台中打印。我错过了什么

func startObservingNewWorkouts() {

    let sampleType =  HKObjectType.workoutType()

    //1. Enable background delivery for workouts
    self.healthStore.enableBackgroundDelivery(for: sampleType, frequency: .immediate) { (success, error) in
        if let unwrappedError = error {
            print("could not enable background delivery: \(unwrappedError)")
        }
        if success {
            print("background delivery enabled")
        }
    }

    //2.  open observer query
    let query = HKObserverQuery(sampleType: sampleType, predicate: nil) { (query, completionHandler, error) in

        self.updateWorkouts() {
            completionHandler()
        }


    }
    healthStore.execute(query)

}

func updateWorkouts(completionHandler: @escaping () -> Void) {

    var anchor: HKQueryAnchor?

    let sampleType =  HKObjectType.workoutType()

    let anchoredQuery = HKAnchoredObjectQuery(type: sampleType, predicate: nil, anchor: anchor, limit: HKObjectQueryNoLimit) { [unowned self] query, newSamples, deletedSamples, newAnchor, error in

        self.handleNewWorkouts(new: newSamples!, deleted: deletedSamples!)

        anchor = newAnchor

        completionHandler()
    }
    healthStore.execute(anchoredQuery)


}

func handleNewWorkouts(new: [HKSample], deleted: [HKDeletedObject]) {
    print("new sample added = \(new.last.startTime!)")
}

结果表明,即使设备被锁定,该代码也能正常工作吗?我想在应用程序处于后台或设备被锁定时,只要有更改,就将健康套件数据中的更新发送到我的服务器。这可能吗?是的,即使设备被锁定,它也会处理。但这只有在功能中添加后台模式时才会起作用,对吗?这将只获取180秒的数据。如果我错了,请纠正我。那个么,当应用程序在后台时,我怎样才能持续监控健康数据呢?只需使用打印语句进行测试,Xcode在手机锁定时仍会运行您的打印语句@加里萨博,那个懒散的人还在吗?我想要一个更新的邀请链接--做记号