Google Fit:不使用读取范围读取步骤

问题描述

考虑到 Google Fit 的政策和 API 即将发生变化,我正在尝试调整我的代码以摆脱任何读取范围(因为它们将被声明为限制性的)。

我需要记录步骤并定期阅读。

我用这些 fitnessOptions

声明作用域
fitnessOptions.builder()
    .addDataType(DataType.TYPE_STEP_COUNT_DELTA,fitnessOptions.ACCESS_WRITE)
    .build()

我记录的步骤没有任何问题,但是当尝试从历史客户端读取它们时,它不起作用,除非我使用以下行将 READ Scope 添加fitnessOptions

 .addDataType(DataType.TYPE_STEP_COUNT_DELTA,fitnessOptions.ACCESS_READ)

但根据 update documentation 我应该能够读取我的应用程序获得的数据而无需任何读取范围:

现在,写入范围允许您的应用仅对应用写入的数据具有写访问权限和读访问权限。

这里有一段关于我如何尝试使用历史客户端恢复步骤的代码

        fitness.getHistoryClient(this,getGoogleAccount())
        .readData(
            DataReadRequest.Builder().read(DataType.TYPE_STEP_COUNT_DELTA)
                .bucketByActivitySegment(1,TimeUnit.MINUTES)
                .setTimeRange(startTime,endTime,TimeUnit.MILLISECONDS)
                .enableServerQueries()
                .build()
        ).addOnSuccessListener {
            Log.i(TAG,"Data obtained")
        }.addOnFailureListener {
            Log.e(TAG,"Error obtaining Google Fit History data",it);
        }

更新:

按照@AndyTurner 的建议,我尝试从我自己的 DataSource 记录和读取数据,但是当我从历史客户端读取它时,我没有收到任何 DataPoint。

这是我的数据源:

val dataSource =  DataSource.Builder()
        .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
        .setAppPackageName(BuildConfig.APPLICATION_ID)
        .setType(DataSource.TYPE_DERIVED) // Also tried with DataSource.TYPE_RAW
        .build()

这就是我现在记录步骤的方式:

fitness.getRecordingClient(this,getGoogleAccount())
    .subscribe(dataSource)
    .addOnSuccessListener {
        logger.d(TAG,"Google Fit recording steps");
    }

检索历史数据的代码与之前发布的相同,但使用数据源而不是数据类型。

请注意,我的应用程序不依赖任何硬件来读取步骤。它尝试从 Google Fit 步数实现中读取它(使用设备传感器)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)