verwirrt über android Laufzeitberechtigungen

So hat diese ganz neue android Laufzeitberechtigungen mich verwirrt. Meine App kompiliert und zielt derzeit auf Version 23 ab, was bedeutet, dass ich Laufzeitberechtigungen verwenden muss. Meine App verwendet hauptsächlich die Kamera-API, für die die Kameraberechtigung erforderlich ist. Daher habe ich die Laufzeitberechtigungen hinzugefügt, bevor ich die Kamera als solche öffne:

        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED)
        {//ask permissions for camera
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CAMERA},
                    CameraPermissions);
        }
        else
        {//permissions attained now you can open the camera
            camera=Camera.open(getCid());
            camera.setPreviewCallback(this);
            initPreview(width, height);
            startPreview();
            startTimer();
        }

Ich überprüfe auch, wann ich die Kamera stoppe:

       if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED) {
            camera.setPreviewCallback(null);
            camera.release();
            faceProc.release();
            faceProc = null;
            camera = null;
            inPreview = false;
            cameraConfigured = false;
        }

Die Berechtigungsanforderung wird wie folgt behandelt:

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case CameraPermissions: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                StartUpCam();
            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setMessage("How is this app going to work if you rejected the camera permission.... DUHHHH!!")
                        .setTitle("Rejected");
                builder.setPositiveButton("Exit App", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        //close application
                        closeApp();
                    }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
            }
            return;
        }
    }
}

So ruft es bei der Anforderung die StartUpCam auf, die dann versucht, die Kamera zu öffnen, wenn die Berechtigungen erteilt wurden. Also hier kommen meine Fragen, wenn ich diese Laufzeitberechtigungsprüfungen hinzufüge, wie wirkt sich das auf Android-Geräte unter 6.0 aus? So wird ein Telefon mit Version 5.0.1 auch aufgefordert, Kameraberechtigungen zu erteilen? Muss ich die Kameraberechtigungen in der Manifestdatei entfernen, wenn ich Laufzeitberechtigungen verwende? Derzeit behalte ich die Kameraberechtigungen im Manifest zusammen mit den Laufzeitberechtigungen, von denen ich nicht weiß, ob das korrekt ist oder nicht. Was ist, wenn ich das Ziel absenke und sdk auf 22 statt 23 kompiliere, können Android-Geräte über 6.0 meine App nicht herunterladen? Wenn ich es auf Version 22 absenke, dann vermeide ich all diese Kopfschmerzen ...

Antworten auf die Frage(4)

Ihre Antwort auf die Frage