问题标签 [hkobserverquery]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
693 浏览

ios - HKObserverQuery 后台传递在调用completionHandler 后停止工作

所以根据Apple的说法,我需要在数据被添加到HKHKObserverQueryCompletionHandler之后调用。updateHandler

但是一旦我调用了completionHandler,观察者查询就会停止在后台提供更多更新......

这是我的代码:

如果我不调用completionHandler,一切正常,但我从未测试过很长时间..

0 投票
1 回答
359 浏览

ios - 当步数更新时调用一些东西

现在,我正在尝试设置我的应用程序,以便在用户更新他们的步数时调用一个函数。到目前为止,我有以下代码:

但是,当用户的 stepCount 在后台更新时不会调用此方法,尽管该getSteps方法在前台时确实有效。我是否正确地解决了这个问题,或者我正在尝试做的事情是不可能的?

0 投票
1 回答
275 浏览

ios - 添加新数据并设置 hkObserverQuery 时,HealthKit 不启动应用程序

每当有新数据可用时,我都会尝试让 HealthKit 启动我的应用程序。因此,我尝试按照我在 GitHub 上找到的这个示例将 HKObserverQuery 与后台交付一起使用。

我为我的项目启用了后台模式功能,并确保 Info.plist 中的必需背景模式中只有一项

我正在使用 Xcode 和 IOS 10。我确实意识到某些数据类型有时间限制,所以我通过在模拟器上添加爬升到健康应用程序的航班并查看是否调用了打印方法来测试这一点。但什么都没有发生。我还尝试在 AppDelegate 的 application() 方法中设置断点,但它仅在应用程序第一次启动时执行。在我将条目放入健康应用程序后,它不会被调用。

我在这里做错了什么?或者有什么方法可以查看 Healthkit 是否正在尝试启动我的应用程序?

这是我的 AppDelegate 和其他相关文件

HealthkitAccessor:

0 投票
0 回答
51 浏览

swift3 - iOS传参swift 3

嗨,我想简化我的代码,所以我采用以下方式

//这个函数会调用queryAndObserve函数

所以在 queryAndObserve 函数中

我的问题是我不知道我应该categoryUpdateHandler在observeAndQuery() 中给出什么数据类型。最初我给AnyObject它,它编译好但在运行时崩溃。日志是

无法将“_SwiftValue”(0x1015fc598)类型的值转换为“(__ObjC.HKObserverQuery,()->(),Swift.Optional)->()”(0x1015fc560)。2017-12-15 14:55:09.235334+0530 应用程序名称 [886:238336] 无法将“_SwiftValue”(0x1015fc598)类型的值转换为“(__ObjC.HKObserverQuery,()->(),Swift.Optional) > ()' (0x1015fc560)。

任何想法都会有帮助。谢谢你。

0 投票
0 回答
111 浏览

ios - 即使我在 Health App 中禁用了权限,也能够通过 HKObserverQuery 读取 HealthKit 数据。这是一个错误吗?

我正在开发一个HKObserverQuery在加载视图时立即启动的应用程序。这HKObserverQuery调用了一个执行 an 的函数,该函数可以检索今天HKStatisticsQuery所有的总和。step count

当我启动应用程序时。我允许应用程序读取计数。可用时总计step count

几分钟后。我决定阻止读取step count计数的权限。

当我回到应用程序时,它仍然会使用新的step count计数进行自我更新。

这是一些错误吗?即使应用程序无权访问HealthKit.

0 投票
0 回答
517 浏览

ios - Healthkit:设置“enableBackgroundDelivery”,但当某些设备上的用户有新的健康数据时,iOS 根本不会唤醒应用程序

我正在我的应用程序上使用 HealthKit SDK(它与健康有关)。我设置了“enableBackgroundDelivery”,希望 iOS 在有新的用户健康数据时唤醒我的应用程序,以便我可以开始查询用户的健康数据。当有新的健康数据并且代码在我的设备和用户的设备上按预期工作时,iOS 会唤醒应用程序,但在某些设备上,iOS 根本不会唤醒应用程序。

如果我的代码有问题,那么它不应该适用于任何设备,但它适用于我的设备和用户的设备,所以我认为我的代码出现问题的可能性很小。当我搜索该问题的其他可能性时,我发现当某些设备上有用户的新健康数据时,iOS 不唤醒应用程序的原因如下。

  1. 健身追踪和健康在设置 -> 隐私 -> 运动和健身下关闭。并且运动校准和距离在设置 -> 隐私 -> 位置服务 -> 系统服务下关闭。在这种情况下,默认的健康应用程序本身无法获取健康数据,因此它不会唤醒我的应用程序。

  2. 我的应用程序的后台应用程序刷新已关闭。在这种情况下,当应用程序被最小化或强制关闭时,HealthKit 不会唤醒我的应用程序,因为用户设置就是这样。

  3. iOS 故意不频繁唤醒我的应用程序或任何应用程序,原因有很多,例如节省用户设备的电池电量,或者如果用户正在积极使用如此多的应用程序,那么 iOS 会优先考虑这些应用程序,并且 iOS 会将我们应用程序的服务安排到未来. iOS 内部算法会考虑设备的性能和优化,将服务分配给安装在设备上的应用程序,这意味着我们的代码只有在 iOS 决定执行时才会执行。这可能是为什么我看不到某些用户的健康数据的原因,但持续了多长时间?iOS 应该至少在一两天后唤醒我的应用程序,但它没有。


对于我看到问题的用户,上述#1 和#2 设置已正确设置。如果#3是原因,iOS应该至少在一两天后唤醒我的应用程序,但它并没有唤醒应用程序,我已经与一些用户进行了沟通,他们在iOS默认的“健康”应用程序中有一些数据.


有没有人遇到过这种问题?除了上述原因(代码方面和 iOS 设置方面),还有人知道为什么 iOS 没有唤醒我的应用程序的任何其他原因吗?

我的代码与此类似:https ://gist.github.com/phatblat/654ab2b3a135edf905f4a854fdb2d7c8

谢谢。

0 投票
1 回答
141 浏览

swift - 当应用程序处于后台时,Healthkit 查询不起作用

我需要观察 Healthkit 中的心率数据,然后相应地向用户发送通知。代码运行良好,但每次我必须将应用程序带到前台才能获得通知。我需要它持续工作。查询似乎无法在后台运行。

我已经在网上检查了几乎所有内容,但找不到满足我需要的解决方案。任何帮助,将不胜感激!

编辑:还实现了后台模式。我检查了后台获取。还是不行...

我在下面添加了我的代码片段:

}

0 投票
1 回答
160 浏览

ios - HealthKit HKObserverQuery 没有持续触发

我正在构建一个应用程序,它应该使用监听HealthKit新添加的心率数据的变化,HKObserverQuery但奇怪的是updateHandler,当我使用断点和控制台日志进行调试并将新数据手动添加到HealthKit.

这是大部分代码:

我有一个此类的实例,AppDelegate并在didFinishLaunchingWithOptions.

查询的updateHandler块仅在我设置它并且应用程序进入前台时触发一次,如果我将应用程序置于后台并转到 Health App 并尝试添加新数据,则行为非常不一致。有趣的是,如果我从来没有completionHandler像苹果文档建议的那样调用它,那么该块会正确触发大约 5-6 次,如果我调用它,completionHandler那么它可能每 5 次尝试一次就有效。我打算用来HKAnchoredObjectQuery获取我尝试过的最后一个数据,当观察者触发时它工作正常,但我无法让观察者正常工作。

我错过了什么吗?一些帮助将不胜感激。

更新:出于测试目的,我已将数据类型更改bloodGlucose为,并注意到updateHandler每次都能正确触发,这让我认为我实现的代码是正确的,并且行为因数据类型而异,有人可以确认吗?

0 投票
1 回答
196 浏览

ios - 如何在不提示非香港用户提供权限的情况下使用带有后台交付的 Healthkit 观察者查询?

此应用程序的用户可以选择是否要使用 Healthkit 功能(这些功能不是应用程序运行所必需的)。我想设置一个观察者查询以在后台将数据发送到服务器。

根据此链接上的 Apple 文档:https ://developer.apple.com/documentation/healthkit/hkobserverquery/executing_observer_queries

如果您计划支持后台交付,请在您的应用委托的 application:didFinishLaunchingWithOptions: 方法中设置所有观察者查询。通过在 application:didFinishLaunchingWithOptions: 中设置查询,您可以确保在 HealthKit 交付更新之前查询已实例化并准备好使用。

据我了解,在 application:didFinishLaunchingWithOptions: 方法中设置您的观察者查询意味着我必须在第一次启动时提示用户授予权限。是否可以从其他地方设置后台交付?例如,我可以在提示用户权限的同时这样做吗?

谢谢!

0 投票
1 回答
60 浏览

ios - 调用 HKAnchoredObjectQuery 的 HealthKit HKObserverQuery 不在后台运行结果处理程序

我已经查看了很多 Apple 文档和 SO 问题,但仍然无法弄清楚为什么或者即使这应该有效。

我运行了很长时间HKObserverQuery,我在我的设置中设置了它,AppDelegate并且我设置了所有必需的权限、权利和 info.plist 内容,因此从这个角度来看它可以正常工作。

在模拟器上,我可以运行我的应用程序并在后台运行它,手动将一些数据添加到 HK 数据库中,我看到我的调试器写出观察者查询处理程序被命中。

问题是观察者处理程序创建了一个HKAnchoredObjectQuery但锚定的查询处理程序在应用程序处于后台时永远不会被触发。当我将应用程序带到前台时,观察者和锚定查询正常运行,两个处理程序都会触发并写入我的调试日志。

我的问题是,锚定的查询处理程序是否应该在应用程序处于后台时响应?

我正在自杀,因为我应该获取用户的步骤数据并将其发送到服务器,但现在我只能在用户激活应用程序时获取该数据。