首页 > 解决方案 > Polar 心率传感器不可用作 google fit api (xamarin android) 中的数据源

问题描述

google fit api 文档指出

如果成功声明 BLE 设备,您可以像使用任何其他传感器一样使用 Recording API 和 Sensors API 访问它。例如,您可以通过 SensorsClient.findDataSources 方法获取 BLE 设备的数据源对象。

但我无法找到以 Polar H10 传感器为源的数据源。我所能找到的只是我正在调试我的应用程序的手机的数据源。

在成功声明心率传感器等可穿戴设备后,有人知道如何使用 Google Fit Sensors API 将侦听器注册到正确的数据源吗?

下面是我使用 Xamarin 在 C# 中声明 ble 传感器 (Polar H10) 的代码:

 var pending_result = await FitnessClass.BleApi.ClaimBleDeviceAsync(mClient, device);
 if (pending_result.IsSuccess)
 {
    mActivity.RunOnUiThread(() =>
    {
        releaseButton.Enabled = true;
    });
    FindFitnessDataSources();
  }

下面是我用来查找 heartrate_bpm 数据源的代码:

private async void FindFitnessDataSources()
{
    var dataSourcesResult = await FitnessClass.SensorsApi.FindDataSourcesAsync(mClient, new DataSourcesRequest.Builder()
           .SetDataTypes(Android.Gms.Fitness.Data.DataType.TypeHeartRateBpm)
           .SetDataSourceTypes(DataSource.TypeRaw)
           .Build());        

    Console.WriteLine("Result: " + dataSourcesResult.Status);
    foreach (DataSource dataSource in dataSourcesResult.DataSources)
    {
        Console.WriteLine("Data source found: " + dataSource.Name);
        Console.WriteLine("Data Source type: " + dataSource.DataType);

        ////Let's register a listener to receive Activity data!
        if (dataSource.DataType == Android.Gms.Fitness.Data.DataType.TypeHeartRateBpm)
        {
            Console.WriteLine("Registering Listener for " + dataSource.Name);
            RegisterFitnessDataListener(dataSource, Android.Gms.Fitness.Data.DataType.TypeHeartRateBpm);
        }                               
    }
}

下面是我为上面找到的数据源注册侦听器的代码:

private async void RegisterFitnessDataListener(DataSource dataSource, Android.Gms.Fitness.Data.DataType dataType)
{
    mListener = new OnDataPointListener();
    var status = await FitnessClass.SensorsApi.AddAsync(mClient, new SensorRequest.Builder()
          .SetDataSource(dataSource) // Optional but recommended for custom data sets.
          .SetDataType(dataType) // Can't be omitted.
          .SetSamplingRate(1, TimeUnit.Seconds)
          .Build(),
           mListener);


    if (status.IsSuccess)
    {
        Console.WriteLine("Listener registered!");
    }
    else
    {
        Console.WriteLine("Listener not registered.");
    }

}

标签: javac#androidxamaringoogle-fit

解决方案


我认为这里的问题是 SensorsApi 只允许您访问在 WearOS 上运行的设备。据我所知,除了 M600 之外的 Polar 手表在不同的设备上运行。我目前在使用三星 Galaxy Watch 时遇到同样的问题。我认为唯一的方法是通过 Polar 应用程序将数据同步到 Google Fit 应用程序,然后请求 Google Fit 应用程序的历史数据。如果您找到任何通过 SensorsAPI 使其工作的方法,请告诉我,因为我也尝试使其工作!


推荐阅读