当前位置: 首页 > 知识库问答 >
问题:

检查是否从非活动类授予或拒绝M权限

袁奇玮
2023-03-14

在我的应用程序中,我想执行非活动类中存在的特定函数,但在执行此函数之前,应检查是否授予了某些权限。我在运行时处理请求权限,但如何检查用户是否拒绝此权限并检查“不再显示”

在我的情况下,我检查是否使用授予权限

if(ContextCompat.checkSelfPermission(context,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)

但是,每当我在设置中设置权限总是拒绝以及尝试用其他方法检查时,这都会给我假消息

if (ActivityCompat.shouldShowRequestPermissionRationale(context, Manifest.permission.READ_CONTACTS))

但在拒绝许可时也给我false,并检查“不再显示”

那么检查用户是否拒绝任何权限并从运行时权限对话框中检查永远不再显示或从应用程序设置
中拒绝它的最佳方法是什么


共有1个答案

毋树
2023-03-14

这是特别检查权限的代码。

 private void requestP() {

// Write all permissions in PERMISSIONS array

    String[] PERMISSIONS = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE};

    if (!hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }

}

public static boolean hasPermissions(Context context, String... permissions) {
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

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

        case PERMISSION_ALL: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0) {

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

                    // Read Phone State Permission allowed
                } else {
                   // Read Phone State Permission denied 
                }

                if (grantResults[1] == PackageManager.PERMISSION_GRANTED) {

                   // Write External Storage Permission allowed
                } else {
                   // Write External Storage Permission denied
                }


            } else {

                // All Permissions denied
            }
            // runAfterPermissionGranted

            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

您可以在onRequestPermissionResult()中存储所有权限的标志,并随时检查该标志。

 类似资料:
  • 我有一个针对SDK28的Android应用程序,所以我有处理的权限。我检查是否设置了,但当Exoplayer尝试读取文件(我验证该文件确实存在)时,我看到 com.google.android.exoplayer2.upstream.filedatasource$filedatasourceException:java.io.fileNotfoundexception:/storage/emula

  • 问题内容: 尝试写这个: 找不到执行此简单任务的当前方法。 注意:即使需要其他方法,iOS7也应该可以使用 问题答案: 您可以使用以下代码执行相同的操作: 注意: 确保在构建阶段的“链接二进制”部分中添加框架 您应该在课堂上写一些用于导入的内容 SWIFT 3 斯威夫特4

  • 问题内容: 我看过许多类似的问题,因此表明我已经检查了基础知识。当然,这并不意味着我没有错过任何显而易见的东西。:-) 我的问题是:为什么我拒绝具有特权的用户访问权限,而我却已经在其中输入密码并被授予访问权限?(为了完整起见,我尝试输入错误的密码只是为了确保MySQL客户端在程序启动时拒绝我访问。) 背景: 通过ssh登录到运行MySQL服务器的计算机的外壳,我以root用户身份登录: 太棒了 我

  • 我在清单中添加了对外部存储设备的写访问权限,并在我的Android手机中授予了这些权限。如果他们不存在,我甚至会在执行时要求他们。 然而,我总是得到这个例外: Java语言io。FileNotFoundException:/storage/simulated/03b3d97bd-5186-4506-97dc-9994b7ce0761(权限被拒绝) 你知道为什么吗? 在清单文件中:

  • 我分配一个角色权限来创建数据库。相同的角色被分配给登录用户,但是当我试图使用分配角色的登录用户创建新数据库时,我得到权限拒绝错误。 无法执行语句。权限拒绝,数据库主,所有者dbo。运行此命令需要以下权限:CREATE DATABASE。赛贝斯错误代码=10331严重级别=14,状态=3,事务状态=0第1行 我用15.5分和16分试了一下。我做错什么了吗?我们需要考虑其他参数吗?我经历了这次讨论 h

  • 在Android M(预览版)中,用户可以选择特定的应用程序并检索特定的权限。 所以我想问的是如何在运行时检查授权权限?