在请求Google Fit的权限时,我定义了两个我需要访问的范围。 Google会提示每个人都允许,并允许用户单独接受/拒绝每个人。但是,如果用户接受一个但不接受另一个,则Google将关闭并重新打开提示,再次要求用户许可。我在onActivityResult中没有任何回调。 如果用户接受或拒绝两个权限,一切都会按预期进行。
据我所知,我的代码遵循Google Fit开发人员指南中的示例代码。这是在Android 28(Pie)上发生的。
private val fitnessOptions = FitnessOptions.builder().apply {
// Sensor scope
addDataType(DataType.TYPE_HEART_RATE_BPM, FitnessOptions.ACCESS_READ)
// Activity scope
addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
}.build()
GoogleSignIn.requestPermissions(
fragment,
REQUEST_CODE_GOOGLE_FIT_PERMISSION,
GoogleSignIn.getLastSignedInAccount(fragment.requireContext()),
fitnessOptions
)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_GOOGLE_FIT_PERMISSION) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
if (task.isSuccessful) {
// Handle success
} else {
// Handle failure
}
} else if (requestCode == REQUEST_CODE_GOOGLE_FIT_PERMISSION) {
// Handle permission denied
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
如果用户拒绝其中一项权限,则不会回调onActivityResult
。用户只是陷入了Google请求权限的循环中。