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?
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
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
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?
check using this
if (ContextCompat.checkSelfPermission(this, Android.Manifest.permission.CAMERA)
== PackageManager.PERMISSION_DENIED)
und
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.
}
}