Android RequestMultiplePermissions 不提示具有某些权限组合的权限?

问题描述

我正在更新一个当前使用 ACCESS_FINE_LOCATION 权限且具有新 API 30 要求的应用,现在也需要 ACCESS_BACKGROUND_LOCATION 权限。

在更新应用程序以添加此权限的同时,我也在尝试使用请求权限的新 ActivityResultLauncher 回调方法 (https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code)

这似乎可以很好地使用以下方式启动单个请求:

ActivityResultLauncher<String> launcher = registerForActivityResult(
    new ActivityResultContracts.RequestPermission(),this::processpermissionResult);

launcher.launch(somePermission);

但是,由于我需要 ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATION,因此需要一些额外的代码来跟踪多个回调的结果(因为每个请求都会生成自己的回调),以便我可以采取适当的如果授予一项、两项或未授予任何权限,则采取行动。

为了稍微简化一下,我希望改用 RequestMultiplePermissions 方法,这样可以方便地为我提供一个回调,并在地图中显示所有结果:

ActivityResultLauncher<String[]> launcher = registerForActivityResult(
    new ActivityResultContracts.RequestMultiplePermissions(),this::processpermissionResult);

launcher.launch(new String[] {
    Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION
});

然而,我发现当我在同一个请求中同时请求 ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATION 时,我不再收到任一权限对话框的提示,并且两个权限的回调都返回 false。

但是,我可以使用 RequestMultiplePermissions 对这些权限进行单独请求,方法是为其提供一个包含单个权限的数组,然后使用与使用单个 {{1} 相同的方法多次调用 launch }} 调用,这将起作用。

当涉及到 RequestPermission 时,ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATION 权限之间似乎存在一些冲突/交互?我能够取出 RequestMultiplePermissions 并使用不同的权限,例如 ACCESS_BACKGROUND_LOCATION,然后我会收到两个单独的权限对话框提示

我对 WRITE_EXTERNAL_STORAGEACCESS_FINE_LOCATION 权限有什么误解吗?我不应该同时请求它们吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)