我很难从GoogleSignIn.requestPermissions()方法中得到结果。我请求用户提供水化数据许可。此代码位于按钮onClick范围内。
val fitnessOptions = FitnessOptions.builder()
.addDataType(DataType.TYPE_HYDRATION, FitnessOptions.ACCESS_READ)
.addDataType(DataType.TYPE_HYDRATION, FitnessOptions.ACCESS_WRITE)
.addDataType(DataType.AGGREGATE_HYDRATION, FitnessOptions.ACCESS_READ)
.addDataType(DataType.AGGREGATE_HYDRATION, FitnessOptions.ACCESS_WRITE)
.build()
val account = GoogleSignIn.getAccountForExtension(context, fitnessOptions)
if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {
GoogleSignIn.requestPermissions(
activity,
GOOGLE_FIT_PERMISSIONS_REQUEST_CODE,
account,
fitnessOptions)
} else {
// we have access ...
}所以我找到了一种方法,在写作中,我们必须使用rememberLauncherForActivityResult来获得我们的活动的结果。
val resultLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartIntentSenderForResult()) { activityResult->
if (activityResult.resultCode == RESULT_OK)
Log.d("appDebug", "Accepted")
else {
Log.d("appDebug", "Denied")
}
}不幸的是,这并不适用于谷歌权限,因为我无法创建一个意图。我应该如何在喷气背包写作中处理这个问题?文档中只提到了UI工具包中过时的onActivityResult。
发布于 2022-08-30 11:59:15
我有同样的用例。我用这种方法来解决它-
val startForResult =
rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
viewModel.uiState.value.isGoogleFitConnected=true
}
}
val googleSignIn =
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.addExtension(fitnessOptions)
.build()
val intent = GoogleSignIn.getClient(context, googleSignIn)
startForResult.launch(intent.signInIntent)有关更多细节,请查看本教程代码段。
https://stackoverflow.com/questions/71078596
复制相似问题