Issues mit anfragenden Berechtigungen Marshmallow

Ich versuche, eine einfache Kameraanwendung zu erstellen, die auf das gespeicherte Foto aus der Galerie zugreifen kann (wird als Teil einer anderen App benötigt, aber aufgrund von Problemen, die ich hatte, entwickle ich dies in einem leeren Projekt) hauptsächlich dieses Tutorialhttps: //guides.codepath.com/android/Accessing-the-Camera-and-Stored-Medi

achdem mir klar wurde, dass es nur aufgrund der Funktionsweise von Berechtigungen in Marshmallow abstürzen würde und Abwärtskompatibilität erforderlich ist, habe ich versucht, Tutorials zum Implementieren von Berechtigungsanforderungen zu befolgen, damit ich die App tatsächlich verwenden kan

Das ist, was ich derzeit nach mehreren Stunden des Versuchs habe. Ich habe dem Manifest Berechtigungen hinzugefügt, aber da diese recht normal sind, habe ich mich nicht darum gekümmert, diese zu kopieren und einzufügen. Dies stürzt derzeit bei der test () -Methode ab, da es keine Gruppe mit dem Namen Storage gibt. Wenn diese Zeile auskommentiert ist, wird nur die Angabe "Erlaubnis verweigert" angezeigt, ohne dass ich aufgefordert werde, die Erlaubnisse zu sortieren (ob auf einem Marshmallow-Gerät oder nicht). Ehrlich gesagt bin ich jetzt ratlos. Ich muss dies tun, bevor ich die Kamera in der onLaunchCamera-Methode starte (die durch Klicken auf eine Schaltfläche gestartet wird), um die Berechtigungen zum Lesen und Schreiben von externem Speicher und zum Zugreifen auf die Kamera zu erhalten. Jede Hilfe, die Sie geben können, wäre sehr dankbar.

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage