我已经构建了一个导入睡眠样本的方法,但我无法让它在几小时内返回正确的值.

查询睡眠数据的方法如下所示:

func updateHealthCategories() {

    let categoryType = HKObjectType.categoryTypeForIdentifier(HKCategoryTypeIdentifierSleepAnalysis)

    let start = NSDate(dateString:"2015-11-04")
    let end = NSDate(dateString:"2015-11-05")

    let categorySample = HKCategorySample(type: categoryType!,value: HKCategoryValueSleepAnalysis.Asleep.rawValue,startDate: start,endDate: end)

    self.houRSSleep = Double(categorySample.value)

    print(categorySample.value)
}

日期的格式如下:

extension NSDate
{
    convenience
    init(dateString:String) {
        let dateStringFormatter = NSDateFormatter()
        dateStringFormatter.dateFormat = "yyyy-MM-dd"
        dateStringFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
        let d = dateStringFormatter.dateFromString(dateString)!
        self.init(timeInterval:0,sinceDate:d)
    }
}

我正在调用11月4日至5日的数据,其中包含以下数据:

但是,categorySample.value返回1而不是3.

解决方法

您要访问的值是类别样本值,HKCategoryType,而不是睡眠小时数.

HKCategoryTypeIdentifierSleepAnalysis的定义

typedef enum : NSInteger {
   HKCategoryValueSleepAnalysisInbed,HKCategoryValueSleepAnalysisAsleep,} HKCategoryValueSleepAnalysis;

定义两个可能的值,0或1,其中值1与HKCategoryValueSleepAnalysisAsleep匹配.

让小时入睡需要设置HKSampleQuery.

代码看起来像这样:

if let sleepType = HKObjectType.categoryTypeForIdentifier(HKCategoryTypeIdentifierSleepAnalysis) {

    let predicate = HKQuery.predicateForSamplesWithStartDate(startDate,endDate: endDate,options: .None)
    let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierEndDate,ascending: false)
    let query = HKSampleQuery(sampleType: sleepType,predicate: predicate,limit: 30,sortDescriptors: [sortDescriptor]) { (query,tmpResult,error) -> Void in                  
        if let result = tmpResult {
            for item in result {
                if let sample = item as? HKCategorySample {                     
                    let value = (sample.value == HKCategoryValueSleepAnalysis.Inbed.rawValue) ? "Inbed" : "Asleep"                     
                    print("sleep: \(sample.startDate) \(sample.endDate) - source: \(sample.source.name) - value: \(value)")
                    let seconds = sample.endDate.timeIntervalSinceDate(sample.startDate)
                    let minutes = seconds/60
                    let hours = minutes/60
                }
            }
        }
    }

    healthStore.executeQuery(query)
}

我从http://benoitpasquier.fr/sleep-healthkit/总结了这一点.

ios – 为HKCategoryTypeIdentifierSleepAnalysis查询HealthKit的更多相关文章

  1. 可可 – NSTimer中的代码可防止自动睡眠

    我在我的应用程序中运行了一个NSTimer,它收集一些数据并定期发送到服务器.在生产中,计时器将每隔几个小时发射一次.我担心干扰自动睡眠.在测试中,计时器和睡眠时间的某些组合完全阻止自动睡眠–显示器休眠,系统保持运行.将我的NSTimer设置为一分钟始终会停止它.一些Mac应用程序因运行时干扰自动睡眠而臭名昭着.什么操作会阻止系统进入睡眠状态?

  2. ios – 为HKCategoryTypeIdentifierSleepAnalysis查询HealthKit

    我已经构建了一个导入睡眠样本的方法,但我无法让它在几小时内返回正确的值.查询睡眠数据的方法如下所示:日期的格式如下:我正在调用11月4日至5日的数据,其中包含以下数据:但是,categorySample.value返回1而不是3.解决方法您要访问的值是类别样本值,HKCategoryType,而不是睡眠小时数.HKCategoryTypeIdentifierSleepAnalysis的定义定义两个

  3. 通过Swift语言来使用HealthKit中的睡眠分析功能

    简介HealthKit框架提供了数据结构以便我们能够将数据存储到名为HealthKitstore的加密数据库中。iPhone和iWatch都有自己的HealthKitstore,两者之间的健康数据会进行同步。HealthKit和Health应用并不存在于iPad中。在本文的剩余部分,我将会为你演示在iOS平台上如何使用HealthKit框架来保存和访问睡眠分析数据。使用HealthKit框架我们应用的目标是通过Start和Stop按键保持睡眠分析信息并取回该数据。为了表示用户在床上和睡觉两种状态,Heal

  4. 在手机在Android中睡觉时处理NFC

    我想知道手机睡觉时是否可以处理NFC?似乎没有意图启动,所以我想系统关闭了nfc?解决方法不会.当设备的显示屏关闭时,不会生成和发送意图.如果您有NexusS,请尝试标记某些内容并观察catlog,您将在手机上找不到任何内容.我认为这种行为非常合理.从今天起,我们周围的许多东西都有RFID标签,如果即使屏幕关闭也可以触发NFC应用程序,可能会发生意外情况.

  5. android – 使用AlarmManager.RTC类型调度的PendingIntent仍然在睡眠模式下调用

    这是我用来为我的小部件设置警报的代码:但问题是即使在睡眠模式下,onReceive()仍然由意图触发.虽然在使用setInexactRepeating而不是setRepeating之后,在睡眠模式下呼叫之间的延迟增加了1分钟,但这仍然是电池消耗.解决方法我相信您将闹钟设置为在日历时间后8秒触发,您已经设置了比当前时间提前8秒的时间..因此您将警报设置为立即触发.我没有看到你在这里需要日历的任何理由

  6. android – 防止手机在应用运行时进入睡眠模式

    当我的线程发送HTTP请求时,我想阻止AndroidMobile进入睡眠模式.当线程正在进行HTTP调用时发生的事情移动设备进入睡眠模式,当用户唤醒时,电话线程永远不会完成.用户必须重新启动应用程序.该怎么办?

  7. Android – Google Play服务活动识别 – 电池使用?

    GooglePlay服务组件是否始终确定用户当前的活动,还是仅当应用连接到接收活动更新时?documentation并不清楚这一点,它只是说它的电池影响一般很小.我想知道一个应用程序是否不断地查询用户的当前活动会对用户的电池造成额外的压力.解决方法电池成本基于应用指定的时间间隔.因此,如果您要求2分钟的间隔时间,设备将睡眠2分钟,唤醒几秒钟进行活动识别,然后再返回睡眠2分钟.2或3分钟的间隔应该具有最小的电池冲击.

  8. Windows – 如何在16位MASM程序集x86中创建一个睡眠功能?

    我正在尝试在16位MASM程序集x86中创建一个睡眠/延迟程序,例如,每500ms屏幕上打印一个字符.从我所做的研究,似乎有三种方法来实现这一点–我想使用那个使用cpu时钟滴答的方法.请注意,我在MacOSXSNowLeopard上通过VMWareFusion运行WindowsXP–我不知道是否影响任何事情.有人可以指出我正确的方向,还是提供一个可以调整的代码的工作?

  9. 如何在Windows中使用C创建可中断睡眠?

    (另外,你能指出如何用SleepEx唤醒睡眠线程吗?

  10. 当Windows处于睡眠模式时,预定的Java应用程序会运行吗?

    如果我启动一个Java应用程序,它启动并做一些工作然后进入线程睡眠一小时,然后在一小时后醒来并做更多的工作……但我的电脑正在运行Win7,经过15分钟的不活动后,它将进入睡眠模式,所以我的问题是:从我启动Java应用程序一小时后,如果我不触摸PC,它进入睡眠模式,我的Java应用程序是否仍然可以唤醒并完成其工作,如果是这样,Win7PC将在屏幕再次打开时唤醒[因为在Win7睡眠模式下屏幕关闭]?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部