在小米设备上请求运行时权限

Requesting Runtime permissions on Xiaomi devices

在 API 级别 23+ 的设备上请求权限时,文档指出您需要请求每个 权限 您需要的,如果您请求来自您已经拥有权限的权限组由系统授予。 Handle the permissions request response

然而,在将我的应用程序调整到目标 API 级别 23 时,我注意到为该组的一名代表请求权限就足够了 - 以下检查来自同一组的其他权限得到 PackageManager.PERMISSION_GRANTED检查是否有权限时.

例如,如果我请求 READ_CONTACTS 的权限,然后检查我是否有权 WRITE_CONTACTS答案是肯定的。

我在 NexusOne 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

中修复的错误