Android 11中权限对话框未显示

19
在我的应用程序中,我需要访问4个权限(这些权限已在清单文件中声明)。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

在我的代码中,我检查是否已经拥有权限,如果没有:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(
                    arrayOf(
                          Manifest.permission.ACCESS_FINE_LOCATION,
                          Manifest.permission.ACCESS_COARSE_LOCATION,
                          Manifest.permission.ACCESS_BACKGROUND_LOCATION), 1)
            } else {
                ActivityCompat.requestPermissions(this, arrayOf(
                  Manifest.permission.ACCESS_FINE_LOCATION,
                  Manifest.permission.ACCESS_COARSE_LOCATION,
                  Manifest.permission.ACCESS_BACKGROUND_LOCATION), 1)
            }

这段代码在我的模拟器上可以工作,该模拟器的API为29。但是在我自己的设备上,权限弹窗不会显示。你们知道为什么吗?


你在哪里调用对话框函数? - sasikumar
该方法在onStart()方法中的一个方法内被调用。 - André Nogueira
1
当前台未被授权时,您不能请求后台位置权限,同时请求两者将被隐式拒绝而不显示系统对话框。请参见此问题 - Pawel
3个回答

27

任何针对API 30的Android应用现在不再允许同时请求后台权限和常规位置权限。您需要将其拆分为两个单独的请求:

  1. 先请求常规前台位置权限,
  2. 然后在新的请求中请求后台位置权限。

1
哦,我的天啊,如果你的答案不在这里,我肯定要再花两天时间去解决。非常感谢。 - smoothumut
1
它实际上按照所说的方式工作,但我很好奇怎么知道呢?文档中有这个东西的任何迹象吗? - Adam Varhegyi

12

安卓11

若用户在您的应用程序安装期间多次拒绝特定权限请求,则当您的应用程序再次请求该权限时,用户不会看到系统权限对话框。

系统仅重置运行时权限,这些权限在请求时向用户显示运行时提示。

更多详细信息请参阅权限


1
我没有点击拒绝,因为没有弹出对话框。我已经多次重新安装了该应用程序,但仍然没有对话框。 - André Nogueira
请确保所有指令正确执行。 - sasikumar
https://developer.android.com/training/permissions/requesting - sasikumar
在开发者指南中,请求权限的功能解释得非常糟糕。Android开发指南中的这一部分非常复杂,当该功能没有在那里解释时,会使得为新应用程序请求权限变得非常混乱。我试图找出为什么我的应用程序几天都没有显示请求对话框的原因!最终的请求逻辑比开发者指南中解释的要简单得多,但需要引导最终用户前往设置页面,以便在某些权限被拒绝时进行请求! - Reijo Korhonen

8
自 Android 11 开始,如果用户在您的应用程序在设备上安装后的生命周期内多次点击“拒绝”特定权限,则再次请求该权限时,用户不会���到系统权限对话框。用户的操作意味着“不再询问”。在早期版本中,除非用户以前选择了“不再询问”复选框或选项,否则每次您的应用程序请求权限时,用户都会看到系统权限对话框。Android 11 中的此行为更改强烈反对针对用户已选择拒绝的权限进行重复请求。
参考此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接