无法在 API < 23 台设备上使用具有权限的应用程序访问相机

Can't access camera on API < 23 devices with app having permissions

我正在开发一个 android 应用程序,但我遇到了相机权限方面的问题。 单击一个按钮,我称之为

if (android.os.Build.VERSION.SDK_INT > 23) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
                } else {
                    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA);
                }
            } else {
                BarCodeReaderActivity.startActivity(this, REQUEST_CODE_BAR_CODE, mStatus);
            }
        }else{
            if (cameraAvailable)
                BarCodeReaderActivity.startActivity(this, REQUEST_CODE_BAR_CODE, mStatus);
            else {
                Toast.makeText(this, KanbanBoxSettings.getInstance(this).getTranslationString(Strings.message_camera_not_available), Toast.LENGTH_LONG).show();

            }
        }

当我看着 Settings > Apps > "Your app" > Permissions我看到应用有相机权限,为什么相机还是不可用?

我不知道这个错误日志是否有用,但这是我得到的:

E/StopWatchTimer: [LOG_ERR]StopWatchTimerStart : 63 - StopWatchTimer have already start!

在执行相机代码之前调用此方法。

public void checkLocationPermission(){
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED ){
        // You don't have the permission you need to request it
        ActivityCompat.requestPermissions(YourActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION},PERMISSION_REQUEST_CODE_LOCATION);
    } else {
        // You have the permission.
        setUserLocation();
    }
}

然后,覆盖 onRequestPermissionsResult

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == PERMISSION_REQUEST_CODE_LOCATION) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            setUserLocation();
        } else {
            toast(getApplicationContext(),"You have cancelled location accessed request");
            currentLoaction.setImageDrawable(getResources().getDrawable(R.drawable.location));
        }
    }
}

现在调用你的相机方法。如果这不起作用,那么 post 您的相机调用代码。