在Android 10 / Q(SDK 29)上运行的Android ACTIVITY_RECOGNITION权限SDK 28

问题描述 投票:2回答:1

我的Android应用以SDK 28为目标,并连接到Google Fit,以上传数据并读取其他数据。该应用程序使用HistoryAPI读取com.google.step_count.delta数据。

[如果该应用程序以SDK 28为目标,但在SDK 29上运行,则[com.google.android.gms.permission.ACTIVITY_RECOGNITION权限已转换为预先授予的运行时权限] https://developers.google.com/fit/android/authorization#android_permissions

我已经按照文档中的说明添加到应用的清单中。

[当此Android应用在运行Android 10(SDK 29)的设备上并且用户首次连接到Google Fit时,我收到一条日志,上面写着:

There was a problem subscribing.com.google.android.gms.common.api.ApiException: 10: SecurityException: com.google.step_count.delta requires android.permission.ACTIVITY_RECOGNITION

但是文档声称它将被转换为预先授予的运行时权限。

团队尚未准备好将应用程序的目标SDK迁移到29,所以我们如何继续获取com.google.step_count.delta数据而不会出现此错误?

我假设此日志意味着它实际上没有连接,因为没有日志语句说:

Successfully subscribed to com.google.step_count.delta
android android-permissions google-fit google-fit-sdk android-10.0
1个回答
0
投票

不确定是否对您的问题有所帮助,但对类似的问题也有帮助。首先检查您的应用/用户是否允许进行体育锻炼-很有可能是不允许的。如果您允许-您的代码应无例外运行。

对我们来说,问题是如何检测到com.google.android.gms.permission.ACTIVITY_RECOGNITION被允许(在Android 10上的目标sdk 28中运行)-自通话以来

PermissionCompat.isPermissionGranted(context,"com.google.android.gms.permission.ACTIVITY_RECOGNITION")

总是返回true(即使拒绝权限)

解决方法(对于您的应用程序目标sdk 28,在Android 10上运行)将调用requestPermission(而不是isPermissionGranted),该请求在授予权限时不执行任何操作,否则显示对话框。>

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        PermissionCompat.requestPermission(activity, "com.google.android.gms.permission.ACTIVITY_RECOGNITION", requestCode)
}

如果您正在运行没有活动的后台代码,则有两个选择:

  1. 迁移到目标SDK 29(并在清单和检查/请求中使用android.permission.ACTIVITY_RECOGNITION-我们对其进行了测试,并且可以正常工作]
  2. 在主要活动或任何适当的活动开始时,运行上面的呼叫,这将要求用户许可
© www.soinside.com 2019 - 2024. All rights reserved.