【发布时间】: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