极心率传感器在Google Fit API(Xamarin Android)中不可用作数据源

时间:2018-07-23 21:00:48

标签: java c# android xamarin google-fit

google fit api documentation states that

  

如果成功声明了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.");
    }

}

1 个答案:

答案 0 :(得分:0)

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