webentwicklung-frage-antwort-db.com.de

Wie bekomme ich die Erlaubnis für die Kamera in Android (speziell Marshmallow)?

Hey, ich entwerfe eine App in Android Studio. In denen ich die Erlaubnis der Kamera brauche. Ich habe <uses-permission Android:name="Android.permission.CAMERA" /> in die Datei AndroidManifest.xml aufgenommen. Es funktioniert einwandfrei in allen Android-Versionen außer Marshmallow. Wie erhalte ich standardmäßig eine Kameraerlaubnis? Wenn nicht möglich, wie frage ich es vom Benutzer?

14
Toyas

Prüfen Sie zunächst, ob der Benutzer die Berechtigung erteilt hat:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
    == PackageManager.PERMISSION_DENIED)

Dann könnten Sie dies verwenden, um den Benutzer anzufragen:

ActivityCompat.requestPermissions(activity, new String[] {Manifest.permission.CAMERA}, requestCode);

Und in Marshmallow wird es in einem Dialog angezeigt

36
Serch

Mit dem folgenden Code können Sie die Kameraerlaubnis in Marshmallow anfordern. 

Prüfen Sie zunächst, ob der Benutzer die Berechtigung erteilt. Wenn der Benutzer nicht die Erlaubnis dann die Kamera Erlaubnis anfordern.

private static final int MY_CAMERA_REQUEST_CODE = 100;

    if (checkSelfPermission(Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
               requestPermissions(new String[]{Manifest.permission.CAMERA},
                            MY_CAMERA_REQUEST_CODE);
                }

Nach dem Anfordern der Berechtigungswarnung wird angezeigt, um die Erlaubnis zu erfragen enthält Erlaubnis- und Ablehnungsoptionen. Nach Klick auf Aktion können wir .__ bekommen. Ergebnis der Anforderung mit der folgenden Methode.

@Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == MY_CAMERA_REQUEST_CODE) {

            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();

            } else {

                Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();

            }

        }}//end onRequestPermissionsResult
25

RxPermission ist die beste Bibliothek, die Code 1 Zeile gemacht hat.

Für die Kameraerlaubnis ist die Problemumgehung so.

1) Fügen Sie diese Berechtigung zuerst in Ihren manifest.xml ein.

<uses-permission Android:name="Android.permission.CAMERA" />

2) Dann fragen Sie nach der Laufzeiterlaubnis.

 new RxPermissions(this)
.request(Manifest.permission.CAMERA) // ask single or multiple permission once
.subscribe(granted -> {
    if (granted) {
       // All requested permissions are granted
    } else {
       // At least one permission is denied
    }
});

füge diese Bibliothek in deinen build.gradle ein

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}

Ist das nicht einfach?

2
Khemraj
check using this
if (ContextCompat.checkSelfPermission(this, Android.Manifest.permission.CAMERA)
            == PackageManager.PERMISSION_DENIED)

und 

2
Kogile

Das funktioniert für mich, die Quelle ist hier

int MY_PERMISSIONS_REQUEST_CAMERA=0;
        // Here, this is the current activity
        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 );
                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        }
1
cmujica