Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 摄像头请求权限出现错误_Java_Android - Fatal编程技术网

Java 摄像头请求权限出现错误

Java 摄像头请求权限出现错误,java,android,Java,Android,我是android新手,我正在尝试构建一个手电筒应用程序。我试图请求使用相机的许可,但无法解决相机的请求。任何解释和解决方案。找到下面的代码 mButtonEnabled = findViewById(R.id.buttonEnable); mButtonEnabled.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {

我是android新手,我正在尝试构建一个手电筒应用程序。我试图请求使用相机的许可,但无法解决相机的请求。任何解释和解决方案。找到下面的代码

mButtonEnabled = findViewById(R.id.buttonEnable);
    mButtonEnabled.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[] {Manifest.permission.CAMERA}, CAMERA_REQUEST);
        }
    });
}

您可以根据需要使用任何号码。Android没有这个属性,它只是您下一步处理响应的标识符。

接下来,我编写了为摄像头授予运行时权限的代码,其中有一个数组字符串,您可以在运行时根据需要授予多个请求

公共类MainActivity扩展了AppCompatActivity{ 私有静态最终int权限\请求\代码=200

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (checkPermission()) {
    //main logic or main code

   // . write your main code to execute, It will execute if the permission is already given.

    } else {
        requestPermission();
    }
}

private boolean checkPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {
        // Permission is not granted
        return false;
    }
    return true;
}

private void requestPermission() {

    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.CAMERA},
            PERMISSION_REQUEST_CODE);
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_SHORT).show();

                // main logic
            } else {
                Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_SHORT).show();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                            != PackageManager.PERMISSION_GRANTED) {
                        showMessageOKCancel("You need to allow access permissions",
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                                            requestPermission();
                                        }
                                    }
                                });
                    }
                }
            }
            break;
    }
}

private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
    new AlertDialog.Builder(MainActivity.this)
            .setMessage(message)
            .setPositiveButton("OK", okListener)
            .setNegativeButton("Cancel", null)
            .create()
            .show();
}
}


希望对您有所帮助

我假设您遇到的错误是编译器错误,因为没有声明CAMERA_请求。这只是一个数字,您可以将其定义为您正在发出的请求的id。理想情况下,应该将其定义为实例变量

此id将通过方法调用作为requestCode传递给您,以帮助您识别响应针对哪个请求。它还将授予分别授予的权限,因为您可以一次请求多个权限:

private final int REQUEST_CAMERA_ID = 123456;

public void setupUI() {

    mButtonEnabled = findViewById(R.id.buttonEnable);
    mButtonEnabled.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[] {Manifest.permission.CAMERA}, REQUEST_CAMERA_ID);
        }
    });
}

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

    switch (requestCode) {
        case REQUEST_CAMERA_ID:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Permission was granted
            } else {
                    // Permission was denied
            }
        break;
    }
}

谢谢,richard,这很有效。我好像没有申报拍照要求