微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取 Google 帐户数据以从 Android 上的 Google Fit API 获取步骤?

如何解决如何获取 Google 帐户数据以从 Android 上的 Google Fit API 获取步骤?

我想从 Android 上的 Google Fit API 访问步数。我有以下一段代码,当单击按钮时执行 tryToAccessstepsFromGoogleFit()

val fitness_OPTIONS: fitnessOptions = fitnessOptions.builder()
        .addDataType(DataType.TYPE_STEP_COUNT_DELTA,fitnessOptions.ACCESS_READ)
        .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA,fitnessOptions.ACCESS_READ)
        .build()

private fun tryToAccessstepsFromGoogleFit() {
    val account = GoogleSignIn.getAccountForExtension(requireContext(),fitness_OPTIONS)
    // all fields of account are empty

    if (!GoogleSignIn.hasPermissions(account,fitness_OPTIONS)) {
        Log.i(TAG,"Asking for permission")
        GoogleSignIn.requestPermissions(
            this,GOOGLE_FIT_STEPS_PERMISSIONS_REQUEST_CODE,account,fitness_OPTIONS
        )
    } else { // this branch is executed which is weird
        Log.i(TAG,"Already has permissions")
        accessstepsFromGoogleFit()
    }
}

private fun accessstepsFromGoogleFit() {
    Log.i(TAG,"Accessing steps from Google Fit")

    val account = GoogleSignIn.getAccountForExtension(requireContext(),fitness_OPTIONS)

    fitness.getHistoryClient(this.activity!!,account)
        .readDailyTotal(DataType.TYPE_STEP_COUNT_DELTA)
        .addOnSuccessListener { result ->
            // do whatever with the result
        }
        .addOnFailureListener { e ->
            Log.i(TAG,"There was a problem getting steps: " + e.localizedMessage)
            Toast.makeText(context,R.string.permission_not_granted,Toast.LENGTH_LONG).show()
            // this branch is executed and error happens "4: The user must be signed in to make this API call."
        }
}

这或多或少类似于 Google Fit android API 文档中的那个。

问题在于,getAccountForExtension 似乎没有返回任何合理的帐户数据,也没有表现出任何意图提示用户选择他们的帐户并授予对 Google 健身数据的访问权限。 我应该怎么做才能实现这一目标?


此外,在 SO 上,我找到了显示选择帐户对话框的代码

private fun startSignInIntent() {
    val signInClient: GoogleSignInClient = GoogleSignIn.getClient(
        this.activity!!,GoogleSignInoptions.DEFAULT_SIGN_IN
    )
    val intent = signInClient.signInIntent
    startActivityForResult(intent,GOOGLE_ACCOUNT_CHOSEN)
}

显示上面的对话框,然后使用 GoogleSignIn.getAccountForExtension 允许从 fitness API 获取数据,但文档没有说明这一点。


可能有用的信息:

  • SDK 目标版本:29
  • Android 9
  • 在 Miui Global 11.0.4 上测试
  • 我已经在 Google Developers Console 中创建了一个项目,提供了 SHA1,为此项目启用了 fitness 等。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。