Проблемы с запросом разрешений Зефир

Я пытаюсь создать простое приложение для камеры, которое может получить доступ к сохраненной фотографии из галереи (необходимо как часть другого приложения, но из-за проблем, с которыми я сталкиваюсь, я разрабатываю это в пустом проекте), и в основном следил этот урокhttps://guides.codepath.com/android/Accessing-the-Camera-and-Stored-Media

После того, как я понял, что из-за того, как работают разрешения в Marshmallow, произойдет сбой и потребуется обратная совместимость, я попытался следовать учебным курсам по реализации запросов на разрешение, чтобы действительно использовать приложение.

Это то, что я сейчас имею после нескольких часов попыток. Я добавил разрешения в манифест, но так как они довольно стандартные, я не удосужился скопировать и вставить их. В настоящее время происходит сбой метода test () из-за отсутствия группы с именем Storage. С этой строкой, закомментированной, она просто скажет, что в разрешении отказано, не предлагая мне отсортировать разрешения (на устройстве «Зефир» или нет). Честно говоря, я сейчас в растерянности. Что мне нужно сделать, это перед запуском камеры в методе onLaunchCamera (который запускается нажатием кнопки), чтобы получить разрешения на чтение и запись на внешнее хранилище и на доступ к камере. Любая помощь, которую вы можете оказать, будет высоко ценится.

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();
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос