0

我正在仔细关注Google 的有关从 Google Fit 获取历史步骤的文档

我在清单中添加了权限:

<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>

我正在检查用户是否有这样的权限:

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACTIVITY_RECOGNITION)
          != PackageManager.PERMISSION_GRANTED) {
      // Permission is not granted
}

确实如预期的那样,我看到用户没有权限,所以我使用以下代码来请求权限:

ActivityCompat.requestPermissions(activity, { Manifest.permission.ACTIVITY_RECOGNITION }, MY_PERMISSIONS_REQUEST_ACTIVITY_RECOGNITION)

这会导致出现以下弹出窗口:

在此处输入图像描述

接下来,我想使用以下代码使用录制客户端进行订阅:

GoogleSignInAccount account = GoogleSignIn.getAccountForExtension(context, options)

Fitness.getRecordingClient(context, account).subscribe(DataType.TYPE_STEP_COUNT_DELTA);

但是调用它会抛出这个异常:

java.util.concurrent.ExecutionException: com.google.android.gms.common.api.ApiException: 4: The user must be signed in to make this API call.

为了解决这个问题,我不得不打电话:

FitnessOptions options = FitnessOptions.builder()
                .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
                .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
                .build();

    GoogleSignIn.requestPermissions(activity, GOOGLE_FIT_PERMISSIONS_REQUEST_CODE, account, options);

这将显示此弹出窗口:

在此处输入图像描述

只有这样我才能从 API 成功获得这些步骤。

我的问题是为什么我必须调用 GoogleSignIn.requestPermissions()?这在文档中没有提到。我记得它在早期版本的文档中被提及,然后被 ActivityCompat.requestPermissions() 替换。所以看来我现在必须调用这两个函数,而不仅仅是 ActivityCompat?也许文档需要更新?

对这个问题有任何帮助吗?

4

1 回答 1

0

在 中ActivityCompat.requestPermission(),您正在请求应用权限以访问用户设备上的一组操作或数据(联系人、消息等)。

GoogleSignIn.requestPermissions()要求用户允许您的应用程序访问/使用其 Google 帐户中的一组数据(照片、帖子等)时。

简单的答案是,它们绝不相似或相关,每个人都要求完全不同的东西。

于 2020-11-20T18:20:39.867 回答