[英]Android ACTIVITY_RECOGNITION Permission SDK 28 running on Android 10/Q (SDK 29)
我的 Android 应用程序针对 SDK 28 并连接到 Google Fit 以上传数据并读取其他一些数据。 该应用程序使用 HistoryAPI 读取 com.google.step_count.delta 数据。
This documentation claims that "com.google.android.gms.permission.ACTIVITY_RECOGNITION permission is converted into a pre-granted runtime permission" if the app targets SDK 28 but runs on SDK 29: 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
已解决:在应用程序中 Api 级别 28 +
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
应用程序应检查是否已授予权限:
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACTIVITY_RECOGNITION)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
}
要请求许可:
ActivityCompat.requestPermissions(thisActivity,
arrayOf(Manifest.permission.ACTIVITY_RECOGNITION),
MY_PERMISSIONS_REQUEST_ACTIVITY_RECOGNITION);
了解有关请求 Android 运行时权限的更多信息。
如果您的应用以 SDK 级别 28 或以下为目标,则必须在其清单文件中指定 com.google.android.gms.permission.ACTIVITY_RECOGNITION 权限。
看起来文档已更新: https://developer.android.com/about/versions/10/privacy/changes#physical-activity-recognition
我能够通过仅使用清单中的 API 28 权限(com.google.android.gms.permission.ACTIVITY_RECOGNITION)来解决这个问题。
如果应用程序安装在运行 Android 10 (API 29) 的设备上,系统似乎正确地自动授予权限 android.permission.ACTIVITY_RECOGNITION。
因为用户可以在设置中更改此设置(设置 > 应用程序和通知 > 权限管理器 > 体育锻炼 > 指定应用程序 > 拒绝),如果应用程序安装在运行 Android 10 的设备上,我能够检查 android.permission.ACTIVITY_RECOGNITION 权限(API 29)。
不确定它是否对您的问题有帮助,但它可以帮助我们解决类似的问题。 首先检查您的应用程序/用户是否允许进行体育活动 - 很可能没有。 如果您允许,您的代码应该毫无例外地运行。
Issue for us was how to detect that com.google.android.gms.permission.ACTIVITY_RECOGNITION is permitted (running in target sdk 28 on Android 10) - since call
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)
}
如果您正在运行活动不可用的后台代码,您有两个选择:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.