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

Android-检查权限

夏兴生
2023-03-14

此代码用于测试应用程序是否具有权限,如果您具有权限,则返回true,否则返回false。

 public class CheckPermission extends Activity {
    private final Context context;
    private static final String MNC = "MNC";
    int permReq = 0;
    String permMan = "";

    public CheckPermission(Context context) {
        this.context = context;
    }

    //perMan can be any code number higher than 0
    public void requestPermission(String permRequested){
        switch (permRequested) {
            case "CAMERA":
                //Request for Camera
                this.permReq =  ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA);
                this.permMan = Manifest.permission.CAMERA;
                break;
            case "INTERNET":
                //Requesr for Internet
                this.permReq =  ContextCompat.checkSelfPermission(context, Manifest.permission.INTERNET);
                this.permMan = Manifest.permission.INTERNET;
                break;
            case "STORAGE":
                //Request for group Storage - Read_External_Storage & Write_External_Storage
                this.permReq =  ContextCompat.checkSelfPermission(context, Manifest.permission_group.STORAGE);
                this.permMan = Manifest.permission_group.STORAGE;
                break;
            case "MICROPHONE":
                //Request for group Microphone - Record_Audio
                this.permReq =  ContextCompat.checkSelfPermission(context, Manifest.permission_group.MICROPHONE);
                this.permMan = Manifest.permission_group.MICROPHONE;
                break;
            case "LOCATION":
                //Request for group Location - Acess_Fine_Location & Acess_Coarse_Location
                this.permReq =  ContextCompat.checkSelfPermission(context, Manifest.permission_group.LOCATION);
                this.permMan = Manifest.permission_group.LOCATION;
                break;
            case "CALL":
                //Requesr for call
                this.permReq = ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE);
                this.permMan = Manifest.permission.CALL_PHONE;
                break;
            default:
                break;
        }
    }

    public boolean hasPermission( String permRequested){
        final PackageManager pm = context.getPackageManager();

        if(isMNC_Or_Higher()) {
            requestPermission(permRequested);
            Toast.makeText(this.context, "Is MNC - permMan: " + this.permMan + " Perm required: " + permReq, Toast.LENGTH_SHORT).show();

            if (permReq != pm.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{this.permMan}, this.permReq);
                return false;
            }
        }
        return true;
    }

    //check if is 6.0 or higher
    public boolean isMNC_Or_Higher(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            return true;
        }
        return false;
    }

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

        if (requestCode == this.permReq) {
            if (grantResults.length == 1 &&
                    grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Permissão concedida", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Permissão negada", Toast.LENGTH_SHORT).show();
            }
        } else {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}

错误:

PID:25504 java.lang.NullPointerException:试图在Android.Content.Context Android.Content.Content.Context.GetApplicationContext(view.java:21147)在Android.os.handler.handleCallback(handler.java:739)在Android.os.handler.dispatchMessage(handler.java:95)在Android.os.handler.dispatchMessage(handler.java:148)在Android.os.handler.dispatchMessage(handler.java:148)在Android.app.activityThread.loop(looper.java:148)在Android.app.activityThread.main(616)

共有1个答案

戚学文
2023-03-14

活动不应该有您所写的构造函数。

活动本身是上下文的子类,因此可以编写这个而不是上下文:

this.permReq = ContextCompat.checkSelfPermission(this, Manifest.permission_group.STORAGE);
 类似资料:
  • cmf_auth_check($userId, $name = null, $relation = 'or') 功能 检查用户权限 参数 $userId: int 要检查权限的用户 ID $name: string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组 $relation:string 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有

  • cmf_auth_check($userId, $name = null, $relation = 'or') 功能 检查用户权限 参数 $userId: int 要检查权限的用户 ID $name: string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组 $relation:string 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有

  • 我想检查一个特定的应用程序是否需要在运行时处理Android Marshmallow运行时权限。 以下假设正确吗? 下面是我详细阐述的表格,例如,向具有Android Marshmallow运行时权限的用户请求权限时,需要使用权限。 我知道支持库助手的存在,但我想在这种特殊情况下避免使用它们。

  • 使用以下语法检查在非限制性数据库上授予 的数据库权限: 第1步 ,首先启动数据库。 第2步 ,激活数据库 “XYZ”。 第3步 ,连接到 “XYZ” 数据库。 现在验证数据库的权限: 语法: 示例: 执行结果如下:

  • 我对Android并不陌生,我很习惯于版本处理和如何调整它,但当我看到这一点时,我很困扰。。。 在Lollipop前的任何设备上,这一行都会导致应用程序崩溃,因为构建失败。版本代码。Lollipop字段不存在。。。那么,为什么在文档中推荐的解决方案中会出现这种情况呢? 我真的想知道我错过了什么?

  • 我有一个带有CSS样式和单选按钮的窗体,它模拟了一个选项卡式结构。只有%s是可见的,并且应该是可单击的。 类似于:[EconomyBusinessFirst] 然而,它在我测试的任何Android设备上都不起作用。