我的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
不确定是否对您的问题有所帮助,但对类似的问题也有帮助。首先检查您的应用/用户是否允许进行体育锻炼-很有可能是不允许的。如果您允许-您的代码应无例外运行。
对我们来说,问题是如何检测到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) }
如果您正在运行没有活动的后台代码,则有两个选择: