【问题标题】:Android: Google Fit not finding data sources for DataType.TYPE_LOCATION_SAMPLEAndroid:Google Fit 未找到 DataType.TYPE_LOCATION_SAMPLE 的数据源
【发布时间】:2019-09-07 10:58:48
【问题描述】:

我有一些代码在生产环境中运行了几个月,但昨天突然停止在我的所有应用程序中运行。 我使用 Google Fit 通过 Fitness.SensorClient API 检索位置。 在安装时向用户正确请求位置权限(通用 Android FINE_LOCATION 权限和读取位置并将位置存储到 Google Fit 的权限)。 我以这种方式创建健身选项:

setFitnessOptions(
            FitnessOptions.builder()
                    .addDataType(DataType.TYPE_LOCATION_SAMPLE, FitnessOptions.ACCESS_WRITE));

然后我以这种方式查找数据源:

GoogleSignInAccount lastSignedAccount = GoogleSignIn.getAccountForExtension(context, getFitnessOptions());
    if (lastSignedAccount != null) {
        Fitness.getSensorsClient(context, lastSignedAccount)
                .findDataSources(
                        new DataSourcesRequest.Builder()
                                .setDataTypes(DataType.TYPE_LOCATION_SAMPLE)
                                .setDataSourceTypes(DataSource.TYPE_RAW)
                                .build())
                .addOnSuccessListener(
                        new OnSuccessListener<List<DataSource>>() {
                            @Override
                            public void onSuccess(List<DataSource> dataSources) {
                                for (DataSource dataSource : dataSources) {
                                    Log.i(TAG, "Data source found: " + dataSource.toString());
                                    Log.i(TAG, "Data Source type: " + dataSource.getDataType().getName());

...

OnSuccessListener 中参数dataSources 的值是一个空列表。如果我尝试其他数据类型 .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA),dataSources 不是一个空列表。但是,DataType.TYPE_LOCATION_SAMPLE 和 DataType.TYPE_LOCATION_TRACK 都不会返回任何数据源。

我查看了谷歌服务的发行说明,似乎没有任何相关的变化。 上面的代码似乎等同于 Google 提供的所有示例,例如this one

有没有人知道为什么代码突然停止工作?谢谢

更新:我已验证它不适用于 Android 6、7、8 或 9。

【问题讨论】:

  • 我还有一个几天前刚刚提出的问题:stackoverflow.com/questions/57855759/… Google 似乎改变了一些东西来宣布任何事情......
  • 刚刚注意到将 DataType.TYPE_LOCATION_SAMPLE 替换为 DataType.TYPE_LOCATION_TRACK 为我解决了这个问题。
  • 感谢您的回答。使用 DataType.TYPE_LOCATION_TRACK 并不能解决我的问题。如果我使用 STEPS_DELTA 它可以工作 - 但这是一种完全不同的类型

标签: android google-fit


【解决方案1】:

我找到了解决方案。在我的代码的另一部分,我使用 GoogleSignIn.getLastSignedInAccount 订阅。显然,这可能会导致不匹配,并且不会返回位置。将订阅更改为 GoogleSignIn.getAccountForExtension 解决了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2020-08-29
    • 2017-05-03
    相关资源
    最近更新 更多