在小米设备上请求运行时权限
Requesting Runtime permissions on Xiaomi devices
在 API 级别 23+ 的设备上请求权限时,文档指出您需要请求每个 权限 您需要的,如果您请求来自您已经拥有权限的权限组由系统授予。
Handle the permissions request response
然而,在将我的应用程序调整到目标 API 级别 23 时,我注意到为该组的一名代表请求权限就足够了 - 以下检查来自同一组的其他权限得到 PackageManager.PERMISSION_GRANTED检查是否有权限时.
例如,如果我请求 READ_CONTACTS 的权限,然后检查我是否有权 WRITE_CONTACTS答案是肯定的。
我在 Nexus 和 One Plus 设备上测试了我的代码更改并开始发布应用程序。
然后我开始看到有关 Fabric 的报告,其中唯一未通过权限处理的设备是 Xiaomi,问题是如何请求权限在这些设备上。
解决方案是实际遵循文档中的指南并请求危险权限组中的所有权限,而不是请求一个代表。 (显然只有清单中列出的权限 xml)
当从同一组发出具有多个权限的单个请求时,用户只会看到一个对话框。
我知道文档说明 here 这看起来是更安全的方法
Any permission can belong to a permission group, including normal permissions and permissions defined by your app. However, a permission's group only affects the user experience if the permission is dangerous. You can ignore the permission group for normal permissions.
但到目前为止,我只为 小米 实现了对所有权限的特定请求,并且所有其他设备在向组请求一个权限时工作正常。
更新:
根据 this 正确的行为是在小米中实现的方式 - 这是在 Oreo
中修复的错误
在 API 级别 23+ 的设备上请求权限时,文档指出您需要请求每个 权限 您需要的,如果您请求来自您已经拥有权限的权限组由系统授予。 Handle the permissions request response
然而,在将我的应用程序调整到目标 API 级别 23 时,我注意到为该组的一名代表请求权限就足够了 - 以下检查来自同一组的其他权限得到 PackageManager.PERMISSION_GRANTED检查是否有权限时.
例如,如果我请求 READ_CONTACTS 的权限,然后检查我是否有权 WRITE_CONTACTS答案是肯定的。
我在 Nexus 和 One Plus 设备上测试了我的代码更改并开始发布应用程序。
然后我开始看到有关 Fabric 的报告,其中唯一未通过权限处理的设备是 Xiaomi,问题是如何请求权限在这些设备上。
解决方案是实际遵循文档中的指南并请求危险权限组中的所有权限,而不是请求一个代表。 (显然只有清单中列出的权限 xml)
当从同一组发出具有多个权限的单个请求时,用户只会看到一个对话框。
我知道文档说明 here 这看起来是更安全的方法
Any permission can belong to a permission group, including normal permissions and permissions defined by your app. However, a permission's group only affects the user experience if the permission is dangerous. You can ignore the permission group for normal permissions.
但到目前为止,我只为 小米 实现了对所有权限的特定请求,并且所有其他设备在向组请求一个权限时工作正常。
更新: 根据 this 正确的行为是在小米中实现的方式 - 这是在 Oreo
中修复的错误