首页 > 解决方案 > targetAPI = 29 和设备的 Android 版本上的 Android ACTIVITY_RECOGNITION。< 10

问题描述

我的问题类似于Android 10 请求 ACTIVITY_RECOGNITION的权限,我也没有在设备上显示权限对话框,但条件不同。

我的应用程序的目标是 API 29。

在清单中我有

<uses-permission android:name="android.permission.BODY_SENSORS"/><- 用于测试目的

<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>

Manifest.permission.ACTIVITY_RECOGNITION像往常一样请求许可:

fragment.requestPermissions(permissions, GOOGLE_FIT_ANDROID_PERMISSIONS_REQUEST_CODE)

在装有 Android 9 (API28) 的设备上,我没有收到 ACTIVITY_RECOGNITION 的权限对话框,当我检查权限状态时,它总是被拒绝。

我知道权限逻辑正在工作,因为当我添加了 BODY_SENSORS 权限时,我确实获得了 BODY_SENSORS 的权限对话框,但没有 ACTIVITY_RECOGNITION 的权限对话框。结果,授予了 BODY_SENSORS 的权限,但授予了 ACTIVITY_RECOGNITION - 不是:

权限数组:

android.permission.BODY_SENSORS;android.permission.ACTIVITY_RECOGNITION

grantResults 数组:

0;-1

标签: androidpermissionsgoogle-fitandroid-10.0activity-recognition

解决方案


回答我自己的问题。请不要将其视为事实来源,它是基于我自己的测试。也许 GoogleFit 团队的某个人可以对此发表评论。

前提条件:您的应用面向 API29 或更高版本。

无论安装在设备上的 Android 版本如何,您都应该根据文档为 Manifest 文件添加权限。旁注:即使在装有 Android 9 的设备上没有这些权限,我也能够查询 GoogleFit HistoryApi,但 Android 10 将无法工作。

<uses-permission android:name="android.permission.BODY_SENSORS"/>
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

对于 Android 10 或更高版本的设备:一切都很简单,您应该请求运行时权限,与您添加到清单中的相同。

对于 Android 9 或更低版本的设备:您不必请求运行时权限。这是文档中不清楚的部分。 当然,您可以请求这些权限,但android.permission. ACTIVITY_RECOGNITION您不会收到权限对话框,因此不会授予权限。


推荐阅读