Xamarin iOS 从 HealthKit 读取步数

Posted

技术标签:

【中文标题】Xamarin iOS 从 HealthKit 读取步数【英文标题】:Xamarin iOS Reading Step Counts from HealthKit 【发布时间】:2017-10-03 13:56:59 【问题描述】:

我正在尝试从用户那里及时读取 365 天的步数,然后将其上传到服务器。但是我目前卡在提取数据上,我正确获得了 ios healthkit 的许可,但是我的数据的返回类型只是 get "[0:] HealthKit.HKSample[]"

public void GetSteps()
        
    var healthKitStore = new HKHealthStore();
    var stepRateType = HKQuantityType.Create(HKQuantityTypeIdentifier.StepCount);
    var sort = new NSSortDescriptor(HKSample.SortIdentifierStartDate, true);
    var q = new HKSampleQuery(stepRateType, HKQuery.GetPredicateForSamples(NSDate.Now.AddSeconds(TimeSpan.FromDays(-365).TotalSeconds), NSDate.Now.AddSeconds(TimeSpan.FromDays(1).TotalSeconds), HKQueryOptions.None), 0, new NSSortDescriptor[]  ,
        new HKSampleQueryResultsHandler((HKSampleQuery query2,HKSample[] results, NSError error2) =>
        
            var query = results; //property created within the model to expose later.
            Debug.WriteLine(query);
            Debug.WriteLine(results);
        ));
    healthKitStore.ExecuteQuery(q); 

【问题讨论】:

详细文档和演示在这里:developer.xamarin.com/guides/ios/platform_features/… 我已阅读该指南,但在此处找不到任何有助于解决数据问题的内容。 【参考方案1】:

我想我知道你为什么得到“[0:] HealthKit.HKSample[]”,你正在尝试 Debug.WriteLine 一个对象数组。结果变量是一个数组。而是循环遍历数组,并在其他可用字段中提取“数量”、“开始日期”和“结束日期”:

foreach (var item in results)

    var sample = (HKQuantitySample) item;
    var hkUnit = HKUnit.Count;
    var quantity = sample.Quantity.GetDoubleValue(hkUnit);
    var startDateTime = sample.StartDate.ToDateTime().ToLocalTime();
    var endDateTime = sample.EndDate.ToDateTime().ToLocalTime();
    Debug.WriteLine(quantity);
    Debug.WriteLine(startDateTime);
    Debug.WriteLine(endDateTime);

【讨论】:

以上是关于Xamarin iOS 从 HealthKit 读取步数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xamarin Forms 从 HealthKit 读取 ECG 数据

如何使用 Xamarin Forms 从 HealthKit 读取 ECG 数据

由于 HEALTHKIT 参考,Xamarin.ios 构建被拒绝

由于 HEALTHKIT 参考,Xamarin.ios 构建被拒绝

Xamarin 中的 HKErrorDomain(HealthKit 错误域)常量

Xamarin iOS:等待 HKHealthStore SaveObject 完成