gpt4 book ai didi

android - 如何从 Jetpack Compose 中的 GoogleSignIn 中请求权限获取结果?

转载 作者:行者123 更新时间:2023-12-05 04:35:09 32 4
gpt4 key购买 nike

我在从 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 ...
}

所以我找到了方法,在 compose 中我们必须使用 rememberLauncherForActivityResult 才能获得 Activity 的结果。

val resultLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartIntentSenderForResult()) { activityResult->
if (activityResult.resultCode == RESULT_OK)
Log.d("appDebug", "Accepted")
else {
Log.d("appDebug", "Denied")
}
}

不幸的是,这不适用于谷歌权限,因为我无法创建 Intent 。我应该如何在 Jetpack Compose 中处理这个问题?文档仅提及 UI 工具包的已弃用的旧 onActivityResult。

最佳答案

我有相同的用例。我通过这种方法解决了它-

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)

检查 this tutorial代码 fragment 了解更多详情。

关于android - 如何从 Jetpack Compose 中的 GoogleSignIn 中请求权限获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71078596/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com