Tag: Healthkit

HealthKit数据:读取/写入

该博客涉及iOS中的Health应用程序以及如何从Health应用程序读取数据/向Health应用程序写入数据。 我们将看到HealthKit框架的API。 我们将看到如何从Health应用程序读取数据/向Health应用程序写入数据。 1.在Xcode中创建项目 2.初始设置 3.创建共享管理器(HealthKitManager) 4.获取写权限 5.将数据写入健康应用程序 6.获取读取权限 7.从健康应用程序读取数据 8.注意事项。 1.在Xcode中创建项目 使用Single View Application创建新项目 设置项目详细信息 2.初始设置 一种。 添加HealthKit Framework。 选择“目标”>“构建阶段”>“使用库链接二进制文件”>单击“ +”>键入healthkit并添加。 b。 在开始编写代码之前,我们需要了解等同于读写的术语。 读取=与您的应用共享Health应用数据 写入=从您的应用程序更新Health应用程序数据 我们需要说明为什么要从Health应用程序读取数据或向Health应用程序写入数据。 因此,提供描述。 一种。 需要设置NSHealthShareUsageDescription进行数据读取。 这将在项目中自动添加权利文件 。 3.创建共享管理器(HealthKitManager) 让我们创建一个共享类作为Manager,将代码放入其中。 使用“ 连接”按钮绑定动作, 在此步骤结束时,您的应用程序现在已被授权将“ 步骤”写入“运行状况 ”应用程序。 如果您遇到任何错误/问题,请随时询问您的问题。 5.将数据写入健康应用程序 让我们创建一个函数,该函数将向Health应用程序中写入许多步骤 。 (在HealthKitManager.m中) 6.获取读取权限 请记住,我们已经拥有编写步骤的权限,这意味着我们也可以阅读它们。 因此,对于新的活动类型,我们将获得“健康状况骑车距离”应用程序的数据读取权限。 在“ 读取权限”操作下,您将能够看到权限模态,如下所示。 现在,我们有权从“健康”应用程序读取“ 骑车距离”数据。 7.从健康应用程序读取数据 我们将阅读“距健康的骑行距离”应用程序,但“健康”应用程序中尚无“骑车距离”数据。 让我们手动添加一些虚拟值, 转到健康应用程序>选择健康数据选项卡>活动>骑车距离>单击“ […]

Apple Watch App:显示心率

Apple Watch,健身应用程序,屏幕上的当前心率(bpm)。 简单的任务。 还是? Tl; dr :完整示例。 首先,必须创建一个观察者,因此每当HealthKit的心率数据发生变化时,都会收到更新。 创建心率的样本类型后,可以使用HKObserverQuery完成此操作。 奇怪的是-至少对我来说-这实际上并没有告诉您心率。 必须执行另一个查询才能检索最新的可用值。 该查询需要一个样本类型,谓词来定义日期间隔并进行排序以获取最新的日期间隔。 我使用了完成闭包,因此我们可以返回获取的值。 而且我们还没有完成…返回的数据无法显示,必须使用“计数/分钟”的HKUnit进行转换。 在此处查看完整示例。 我的意思是,它确实有效,但是单个数字就是80多行代码。

健康日记1:更好的HealthKit API

这将是我在我的应用程序Health Up Display上进行的一系列工作中的第一步。 我从社区中的其他开发人员那里汲取了灵感,这些开发人员已经针对自己的应用做了类似的博客。 请查看Brent Simmon的旧版Vesper Sync日记或Curtis Herbert撰写的Slopes Diaries,以获取一些示例。 启动此系列文章有一些目标。 当我通过这些事情进行推理时,一种与自己大声交谈的方法。 可能从已经解决类​​似问题的其他人那里寻求帮助。 在学习过程中,向我后面的其他人提供相同的帮助。 使用公众责任感作为脚下的火,以提供保持专注并最终发布此应用所需的动力。 在我仍将脚趾浸入博客水域时,请提供稳定的内容。 在开始之前,请先了解一下背景知识。 可惜的是,Health Up Display是我几年来一直在从事的健康和健身跟踪应用程序。 我想要一个将Health.app的数据库查看方面与iOS上Activity.app中的UI更相似的设计样式相结合的应用程序。 我还想解决我认为这两个应用程序都存在的缺点。 我喜欢将此应用程序视为这两个应用程序(如果有孩子)的产品。 我在该项目上的进展还没有达到我想要的水平,但是尽管如此,我还是取得了进展,如果您想看看的话,可以使用一个非常有用的beta。 您可以在这里注册尝试一下。 顺便说一句,我们可以继续讨论今天的日记条目。 与HealthKit进行交互的更好的API 正如我提到的,我已经在这个项目上工作了一段时间。 有些代码确实很旧。 就像旧的Swift 2.0。 另外,我只是在学习Swift,而实际上大部分只是用Swift编写的Objective-C代码。 这在一定程度上是我的错,因为我还没有熟悉这种语言,并且在那时,它的风格仍在迅速发展。 这也部分是由于这样的事实,即系统框架尚未(在许多情况下仍未真正为Swift进行过现代化)。 对于HealthKit框架尤其如此。 从好的方面来说,这是一个非常使用闭包的框架,并且在这方面非常适合Swift,但是这些闭包实际上是旧的Objective-C块。 实际上,大多数HealthKit API是使用闭包来异步处理其结果的查询。 不幸的是,在大多数情况下,这些闭包通常具有用于可选的有效查询结果和同时可选的错误的参数。 大多数Swift开发人员并不真的喜欢那样,我们也不认为它非常迅速 。 我们更喜欢使用可靠的Result类型之类的东西,以简单的switch语句清楚地区分成功还是失败。 如果您需要查看内容,请阅读这篇文章。 我的应用程序具有一些旨在为我构建这些查询的类。 它们还为我的应用程序与HealthKit交互提供了一个集中的位置和包装器。 我使用这些实例从HealthKit数据库检索运行状况统计信息,然后将它们存储在我的应用程序自己的数据缓存中,以便UI可以在启动后立即准备好您的最新统计信息。 您确实不需要每次启动应用程序时都等待查询返回。 当查询最终在以后返回较新的数据时,我将更新缓存和应用程序的UI层。 这些类充满了前面提到的并非Swifty的代码实例,而且由于我对Swift风格的了解以及对如何使用HealthKit以及与HealthKit交互的知识越来越多,现在也HealthKit 。 另外,我希望很快就可以开始使用该应用程序的Apple Watch组件,并且我还需要与该目标共享大量此类代码。 我还有一个有趣的宠物项目应用程序,名为Mowing Meter,它使用iPhone的运动协处理器芯片在修剪院子时跟踪您的步距和距离。 我目前正在将其转换为Swift,并将其也转换为“ 真正的 […]

通过HealthKit中的HKWorkoutActivityType获取活动名称

使用HKObjectType.workoutType()获取锻炼后,我们得到HKWorkoutActivityType ,这是一个enum HKWorkoutActivityType : UInt 。 从Swift 4.2开始,由于该枚举的类型为UInt ,因此无法将枚举大小写作为String来获取。 尽管会涉及一些手册,但我们可以构建一个生成器来获取所有枚举用例名称。 在这里,我们将编写代码来生成代码,并使用生成的代码来检查所有值。 在我们的iOS应用中执行此Swift代码 func makeCode(string:String){ let pattern =“ case \\ w *” 让范围= NSMakeRange(0,string.count-1) 让正则表达式=尝试! NSRegularExpression(模式:模式,选项:[]) 正则表达式 .matches(输入:字符串,选项:[],范围:范围) .forEach({结果 让开始= string.index(string.startIndex,offsetBy:result.range.lowerBound) 让结束= string.index(string.startIndex,offsetBy:result.range.upperBound) 让substring = String(string [开始…结束]) 让名称=子字符串 .replacingOccurrences(of:“ case”,带有:“”) .replacingOccurrences(of:““,with:“”) .replacingOccurrences(of:“ \ n”,其中:“”) print(“ dictionary [HKWorkoutActivityType。\(name).rawValue] = \” \(name)\””)) }) } 例如,其中string是来自HKWorkoutActivityType的所有情况 case archery 射箭的常数。 […]

如何在React Native中使用HealthKit处理后台应用刷新

目录 查询样本数据 HealthKit中的后台传递 后台程序刷新 事件发射器,用于将事件发送到Javascript 本机模块不能为空 React Native中的桥梁是什么? 模拟后台获取事件 EventEmitter的多个实例? 由于后台获取事件而启动 无头JS 未设置网桥 在UI和热重载方面,我很喜欢React Native,但是在React Native中,还有很多简单的事情变得非常困难。 主要是关于处理本机功能和React桥。 这篇文章是关于我的工作,从开始使用iOS的React Native中的Background fetch和HealthKit逐渐了解本机模块。 我正在使用的应用程序具有HealthKit集成,这意味着查询HealthKit数据并积累它们以进行其他研究。 功能之一是定期在后台发送锻炼数据。 可能有一些库可以执行此任务,但是我总是喜欢手动执行,因为React Native包装器应该不会那么重,并且我可以完全控制执行。 本文是关于HealthKit的,但相同的想法也应适用于其他背景需求。 还会有很多React Native源代码拼写,阅读和调试起来有些痛苦,但是最后我们学习了很多事情的实际功能。 在撰写本文时,我使用react-native 0.57.5 用HKHealthStore查询样本数据 关于HealthKit,我们可以通过HKHealthStore轻松查询诸如锻炼和步数之类的样本类型。 HKHealthStore是HealthKit管理的所有数据的访问点,我们可以构造HKQuery和HKSampleQuery来微调查询。 让谓词= HKQuery.predicateForSamples( withStart:startDate, 结束:endDate, 选项:[。strictStartDate,.strictEndDate] ) 让查询= HKSampleQuery( sampleType:HKObjectType.workoutType(), 谓词: 限制:0, sortDescriptors:无, resultsHandler:{查询,样本,错误 防护错误==无其他{ 返回 } 回调(样本) }) store.execute(查询) HealthKit中的后台传递 接下来,通过enableBackgroundDelivery方法进行后台传递 调用此方法以注册您的应用以进行后台更新。 只要将指定类型的新样本保存到商店,HealthKit就会唤醒您的应用程序。 […]