gpt4 book ai didi

android - shouldShowRequestPermissionRationale 方法的工作

转载 作者:行者123 更新时间:2023-12-04 23:52:51 30 4
gpt4 key购买 nike

我想在运行时请求权限。我查看了官方的 android 开发者网站,它说如果权限先前被拒绝,shouldShowRequestPermissionRationale 返回 true,如果权限被拒绝,则返回 false,并且不再询问复选框被选中。然后我在网站上看到了这段代码:

if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);

// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}

我的两个问题是:

1)如果用户之前没有获得许可会发生什么??我们需要问他对吗??你把那个代码放在哪里??

2) 即使用户选中了不再询问复选框,上面的代码也会请求权限(当 shouldShowRequestPermissionRationale 返回 false 时,即在 else block 中)。当用户选中该选项时,您如何请求权限?

最佳答案

回答您的两个问题:

您可以先使用checkSelfPermission() 来查看权限是否已经被授予。如果它没有被授予,那么您应该检查 shouldShowRequestPermissionRationale() 是否返回 true 或 false。

shouldShowRequestPermissionRationale() 将在以下情况下返回 true:

  • 当用户之前拒绝了权限但没有选中“不再询问”复选框。

shouldShowRequestPermissionRationale() 在以下 2 种情况下会返回 false:

  • 当用户之前拒绝了权限并且从不询问时再次选中复选框。
  • 当用户第一次请求权限时。

所以,你可以做的是,如果 shouldShowRequestPermissionRationale() 返回 false您可以使用 bool 首选项值(默认值为 true)来检查

  • else情况下第一次请求权限,如果是第一次请求,然后触发 requestPermissions

  • 否则,如果它不是第一个请求并且用户之前拒绝了该请求并且还选中了“不再询问”复选框,您可以显示一个简单的 toast ,说明需要的功能不可用的原因权限,并提及通过设置手动启用它的步骤。

类似这样的:

    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
if(isFirstTimeRequest){
// No explanation needed; request the permission

// RESET PREFERENCE FLAG

ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);

// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
} else {
// User denied previously and has checked "Never ask again"
// show a toast with steps to manually enable it via settings
}
}

关于android - shouldShowRequestPermissionRationale 方法的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56412401/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com