实时获取活动段数据-Google Fit Android

实时获取活动段数据-Google Fit Android,android,google-api,google-fit,Android,Google Api,Google Fit,我曾经通过使用TYPE\u activity\u SAMPLE成功地每20秒实时获取一次活动数据,该方法后来被弃用。文档指向的另一种选择是:在给定的时间范围内执行的活动。我已使用FitnessOptions成功订阅了TYPE\u ACTIVITY\u SEGMENT。访问\u WRITE 我尝试使用SensorsClient查找数据源,就像我使用activity sample查找数据源一样: Fitness.getSensorsClient(this, account)

我曾经通过使用
TYPE\u activity\u SAMPLE
成功地每20秒实时获取一次活动数据,该方法后来被弃用。文档指向的另一种选择是:在给定的时间范围内执行的活动。我已使用
FitnessOptions成功订阅了
TYPE\u ACTIVITY\u SEGMENT
。访问\u WRITE

我尝试使用SensorsClient查找数据源,就像我使用activity sample查找数据源一样:

Fitness.getSensorsClient(this, account)
            .findDataSources(
                    new DataSourcesRequest.Builder()
                            .setDataTypes(DataType.TYPE_ACTIVITY_SEGMENT)
                            .setDataSourceTypes(DataSource.TYPE_DERIVED)
                            .build())
添加了onSuccessListener(actListener是公共变量):

.addOnSuccessListener(
新OnSuccessListener(){
@凌驾
成功时公共无效(列出数据源){
for(数据源数据源:数据源){
i(标记“Act数据源已找到:”+dataSource.toString());
Log.i(标记“Act数据源类型:”+dataSource.getDataType().getName());
//为接收活动段注册侦听器:
if(dataSource.getDataType().equals(DataType.TYPE_活动_段)
&&actListener==null){
Log.i(标记“找到活动_段的数据源!正在注册”);
//为活动段注册数据侦听器:
registerActDataListener(数据源,数据类型.类型\活动\段);
}
}
//如果未找到任何数据源:
if(actListener==null){
Log.i(标记“未找到类型_活动_段的数据源”);
}
当我调试数据源对象时,它的列表是空的,因此没有为这个特定的数据源请求找到任何数据源

我应该这样做,还是应该使用历史API从Fit store中检索片段?这似乎效率低下,因为我希望如前所述每20秒查找一次活动,并且需要经常使用移动数据/Wifi向Fit store发出请求

活动段听起来更像是聚合数据类型,而不是活动样本,但它的状态是瞬时读取

我可能在这方面做得不对,只是试图改进为activity sample工作的代码,但我不确定;如果有任何帮助,我将不胜感激

注意:我只需要当前活动来确定应用程序的行为,我不需要向Fit store写入自定义会话,除非需要读取当前活动

.addOnSuccessListener(
    new OnSuccessListener<List<DataSource>>() {
        @Override
        public void onSuccess(List<DataSource> dataSources) {
            for (DataSource dataSource : dataSources) {
                Log.i(TAG, "Act Data source found: " + dataSource.toString());
                Log.i(TAG, "Act Data Source type: " + dataSource.getDataType().getName());

                 // Register listener for receiving activity segment:
                 if (dataSource.getDataType().equals(DataType.TYPE_ACTIVITY_SEGMENT)
                                        && actListener == null) {
                     Log.i(TAG, "Data source for ACTIVITY_SEGMENT found!  Registering.");
                     // Register data listener for activity segment:
                     registerActDataListener(dataSource, DataType.TYPE_ACTIVITY_SEGMENT);
                 }
            }

            // If no data sources have been found:
            if (actListener == null) {
                Log.i(TAG, "No data sources found for TYPE_ACTIVITY_SEGMENT");
            }