Problemas com a solicitação de permissões Marshmallow

Estou tentando criar um aplicativo básico de câmera que possa acessar a foto salva da galeria (necessária como parte de outro aplicativo, mas devido a problemas que estou tendo, estou desenvolvendo isso em um projeto em branco) e tenho seguido principalmente este tutorialhttps://guides.codepath.com/android/Accessing-the-Camera-and-Stored-Media

Depois de perceber que ele falharia por causa de como as permissões funcionam no Marshmallow e por precisar de compatibilidade com versões anteriores, tentei seguir os tutoriais sobre a implementação de solicitações de permissão para que eu possa realmente usar o aplicativo.

É o que tenho atualmente após várias horas de tentativas. Eu adicionei permissões no manifesto, mas como essas são bastante padrão, não me importei em copiá-las e colá-las. Atualmente, ele trava no método test () porque não existe um grupo chamado Storage. Com essa linha comentada, ela diz apenas permissão negada sem solicitar que eu ordene as permissões (seja em um dispositivo Marshmallow ou não). Francamente, agora estou perdida. O que eu preciso fazer é antes de iniciar a câmera no método onLaunchCamera (que é iniciado com o clique de um botão), para obter permissões de leitura e gravação de armazenamento externo e para acessar a câmera. Qualquer ajuda que você puder dar seria muito apreciada.

private boolean cameraPermissionsCheck() {
    return ContextCompat.checkSelfPermission(this, Manifest.permission_group.CAMERA) == PackageManager.PERMISSION_GRANTED;
}

private boolean storagePermissionsCheck() {
    return ContextCompat.checkSelfPermission(this, Manifest.permission_group.STORAGE) == PackageManager.PERMISSION_GRANTED;
}

private void requestPermissions() {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission_group.CAMERA, Manifest.permission_group.STORAGE}, 123);
}

private void test() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission_group.STORAGE)) {
        //was a toast notification here
        requestPermissions();
    } else {
        requestPermissions();
    }
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 123
            && grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
    }
}

public void onLaunchCamera(View view) {

    //btn = (Button) findViewById(R.id.button);
    if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        if(!cameraPermissionsCheck() || !storagePermissionsCheck()){
            test();
        }
        else {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, getPhotoFileUri(photoFileName)); // set the image file name

            if (intent.resolveActivity(getPackageManager()) != null) {
            // Start the image capture intent to take photo
            startActivityForResult(intent, 0);
            }
        }
    } else {
        Toast.makeText(MainActivity.this, "No Camera",
                Toast.LENGTH_LONG).show();
    }
}

questionAnswers(1)

yourAnswerToTheQuestion