首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Jetpack组合中的GoogleSignIn请求权限中获得结果?

如何从Jetpack组合中的GoogleSignIn请求权限中获得结果?
EN

Stack Overflow用户
提问于 2022-02-11 10:29:46
回答 1查看 191关注 0票数 3

我很难从GoogleSignIn.requestPermissions()方法中得到结果。我请求用户提供水化数据许可。此代码位于按钮onClick范围内。

代码语言:javascript
复制
    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来获得我们的活动的结果。

代码语言:javascript
复制
val resultLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.StartIntentSenderForResult()) { activityResult->
    if (activityResult.resultCode == RESULT_OK)
        Log.d("appDebug", "Accepted")
    else {
        Log.d("appDebug", "Denied")
    }
}

不幸的是,这并不适用于谷歌权限,因为我无法创建一个意图。我应该如何在喷气背包写作中处理这个问题?文档中只提到了UI工具包中过时的onActivityResult。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-30 11:59:15

我有同样的用例。我用这种方法来解决它-

代码语言:javascript
复制
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)

有关更多细节,请查看本教程代码段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71078596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档