android - 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
解决方案
回答我自己的问题。请不要将其视为事实来源,它是基于我自己的测试。也许 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
您不会收到权限对话框,因此不会授予权限。
推荐阅读
- vba - 一旦我使用 With...End With,Word 宏就不起作用
- yii2 - Yii2 通过表格对链接表进行排序和过滤
- security - BLE 设备的质询-响应身份验证
- entity-framework - 在多个 DbContext 中使用相同的实体(EF Core 2)
- python - 如何以低 CPU 使用率从 OpenCV 读取 RTSP 视频?
- ruby - Capybara 无法找到已禁用/未禁用的字段(文本条目)
- spring - 如何在 Spring Boot 应用程序中覆盖 DefaultListableBeanFactory?
- 2sxc - 2sxc 模块的多重过滤器
- c# - 以编程方式更改 defaultproxy 而不是使用 app.config
- php - Podio PHP API - 按计算的字段值过滤项目集合