我正在仔细关注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?也许文档需要更新?
对这个问题有任何帮助吗?