问题描述
我正在更新一个当前使用 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_LOCATION
和 ACCESS_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_LOCATION
和 ACCESS_BACKGROUND_LOCATION
时,我不再收到任一权限对话框的提示,并且两个权限的回调都返回 false。
但是,我可以使用 RequestMultiplePermissions
对这些权限进行单独请求,方法是为其提供一个包含单个权限的数组,然后使用与使用单个 {{1} 相同的方法多次调用 launch }} 调用,这将起作用。
当涉及到 RequestPermission
时,ACCESS_FINE_LOCATION
和 ACCESS_BACKGROUND_LOCATION
权限之间似乎存在一些冲突/交互?我能够取出 RequestMultiplePermissions
并使用不同的权限,例如 ACCESS_BACKGROUND_LOCATION
,然后我会收到两个单独的权限对话框提示。
我对 WRITE_EXTERNAL_STORAGE
和 ACCESS_FINE_LOCATION
权限有什么误解吗?我不应该同时请求它们吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)