Android M - 检查运行时权限 - 如何确定用户是否选中“不再询问”

android

1个回答

写回答

xiaoyan90

2025-06-25 09:50

+ 关注

Android
Android

如何确定用户是否选中“不再询问”?

在开发Android应用程序时,我们经常需要请求一些敏感权限,例如访问用户的联系人、拍照或者使用手机的定位功能。为了保护用户的隐私和安全,从Android 6.0(API level 23)开始,Google引入了运行时权限的概念。运行时权限允许用户在应用程序运行时决定是否授予某个权限。

当我们请求一个权限时,用户可以选择允许或者拒绝授予该权限。此外,用户还可以选择“不再询问”,这意味着用户明确表示不想再看到该权限的授权提示框。在这种情况下,如果我们再次请求该权限,系统将不再显示授权提示框,而是直接返回拒绝权限的结果。

那么,如何确定用户是否选中了“不再询问”呢?下面将介绍两种常用的方法。

方法一:shouldShowRequestPermissionRationale()

shouldShowRequestPermissionRationale()是一个用于检查某个权限是否应该向用户解释为何需要该权限的方法。如果用户之前拒绝过该权限请求,但没有勾选“不再询问”,那么该方法将返回true。如果用户勾选了“不再询问”,那么该方法将返回false。

下面是一个示例代码:

Java

private void requestCameraPermission() {

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)

!= PackageManager.PERMISSION_GRANTED) {

if (ActivityCompat.shouldShowRequestPermissionRationale(this,

Manifest.permission.CAMERA)) {

// 用户之前拒绝过该权限请求,但没有勾选“不再询问”

// 可以向用户解释为何需要该权限

showExplanationDialog();

} else {

// 用户勾选了“不再询问”

// 直接请求权限

ActivityCompat.requestPermissions(this,

new String[]{Manifest.permission.CAMERA},

CAMERA_PERMISSION_REQUEST_CODE);

}

} else {

// 权限已经被授予

// 可以进行相应操作

openCamera();

}

}

在上面的代码中,我们首先使用ContextCompat.checkSelfPermission()方法检查相机权限是否已经被授予。如果权限未被授予,我们接着调用ActivityCompat.shouldShowRequestPermissionRationale()方法来判断用户是否之前拒绝过该权限请求。如果返回true,我们可以向用户解释为何需要该权限;如果返回false,说明用户已经勾选了“不再询问”,我们直接调用ActivityCompat.requestPermissions()方法请求权限。

方法二:onRequestPermissionsResult()

onRequestPermissionsResult()是一个回调方法,用于接收权限请求结果。在该方法中,我们可以检查用户是否授予了所请求的权限,以及用户是否勾选了“不再询问”。

下面是一个示例代码:

Java

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

switch (requestCode) {

case CAMERA_PERMISSION_REQUEST_CODE:

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

// 用户授予了相机权限

openCamera();

} else {

// 用户拒绝了相机权限

if (!ActivityCompat.shouldShowRequestPermissionRationale(this,

Manifest.permission.CAMERA)) {

// 用户勾选了“不再询问”

showPermissionDeniedDialog();

} else {

// 用户未勾选“不再询问”

showPermissionDeniedExplanationDialog();

}

}

break;

// 处理其他权限请求结果...

}

}

在上面的代码中,我们首先检查用户是否授予了相机权限。如果授予了权限,我们可以进行相应操作;如果拒绝了权限,我们再次调用ActivityCompat.shouldShowRequestPermissionRationale()方法来判断用户是否勾选了“不再询问”。如果勾选了“不再询问”,我们可以显示一个对话框来告知用户该权限的重要性;如果未勾选“不再询问”,我们可以显示另一个对话框来解释为何需要该权限。

通过这两种方法,我们可以确定用户是否选中了“不再询问”。根据用户的选择,我们可以采取不同的措施,例如显示解释对话框、引导用户进入系统设置界面等,以提供更好的用户体验。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号