Ich weiß, dass Android 6.0 neue Berechtigungen hat und ich weiß, dass ich sie mit so etwas aufrufen kann
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_WRITE_STORAGE);
}
Heute habe ich eine Google App gesehen, die 3 Berechtigungen benötigt: Kontakte, SMS und Kamera. Es wird eine Seite 1-3 erstellt und alle gleichzeitig aufgerufen, um sie zu aktivieren.
Kann mir jemand sagen, wie ich 4 Berechtigungen aufrufen kann, um sie gleichzeitig zu aktivieren, z. B. SMS, Kamera, Kontakte und Speicher?
Beispiel (habe den Namen der Google App vergessen :()
Die App benötigt SMS, Kontakte und Kamera
Die App hat mich gebeten (und einen Dialog auf Seite 1-3 erstellt), SMS zu aktivieren, Kontakte zu aktivieren und dann die Kamera. Diese Google-App hat also alle drei erforderlichen Berechtigungen zusammen aufgerufen und meine Frage ist, wie ich dasselbe erreichen kann.
Antworten:
Nehmen Sie einfach alle 4 Berechtigungen in den
ActivityCompat.requestPermissions(...)
Anruf auf und Android blättert sie automatisch zusammen, wie Sie es erwähnt haben.Ich habe eine Hilfsmethode, um mehrere Berechtigungen zu überprüfen und festzustellen, ob eine davon nicht erteilt wurde.
Oder in Kotlin:
Dann senden Sie einfach alle Berechtigungen. Android fragt nur nach denjenigen, die es benötigt.
quelle
Hier ist ein detailliertes Beispiel mit mehreren Berechtigungsanforderungen: -
Die App benötigt beim Start 2 Berechtigungen. SEND_SMS und ACCESS_FINE_LOCATION (beide werden in manifest.xml erwähnt).
Ich verwende die Support Library v4, die für Android Pre-Marshmallow vorbereitet ist und daher keine Build-Versionen überprüfen muss.
Sobald die App gestartet wird, werden mehrere Berechtigungen zusammen angefordert. Wenn beide Berechtigungen erteilt werden, wird der normale Ablauf ausgeführt.
ContextCompat.checkSelfPermission (), ActivityCompat.requestPermissions (), ActivityCompat.shouldShowRequestPermissionRationale () sind Teil der Support-Bibliothek.
Falls eine oder mehrere Berechtigungen nicht erteilt werden, fordert ActivityCompat.requestPermissions () Berechtigungen an und das Steuerelement wechselt zur Rückrufmethode onRequestPermissionsResult ().
Sie sollten den Wert des Flags shouldShowRequestPermissionRationale () in der Rückrufmethode onRequestPermissionsResult () überprüfen.
Es gibt nur zwei Fälle:
Fall 1: - Jedes Mal, wenn der Benutzer auf Verweigern von Berechtigungen klickt (einschließlich des ersten Males), wird true zurückgegeben. Wenn der Benutzer dies ablehnt, können wir weitere Erklärungen anzeigen und erneut fragen
Fall 2: - Nur wenn der Benutzer "Nie wieder fragen" auswählt, wird false zurückgegeben. In diesem Fall können wir mit eingeschränkten Funktionen fortfahren und den Benutzer anleiten, die Berechtigungen aus den Einstellungen für weitere Funktionen zu aktivieren, oder wir können das Setup beenden, wenn die Berechtigungen für die App trivial sind.
FALL 1
FALL-2
quelle
Kleiner Code:
Liste der normalen und gefährlichen Android-Berechtigungen in API 23
quelle
}}
quelle
Es ist einfach, so zu machen
In Ihrem onCreate
Dann überprüfen Sie das Ergebnis
quelle
Mein Ansatz basiert auf der Antwort von Nicks und ist hoffentlich etwas besser für mehrere (so viele wie nötig, nicht nur zwei) Berechtigungen geeignet. Es wird vorgeschlagen, die PermissionsHelper-Klasse mit Einzelverantwortung hinzuzufügen:
}}
Wenn eine oder mehrere erforderliche Berechtigungen vom Benutzer nicht erteilt wurden, wird ihm die detaillierte AlertDialog-Nachricht angezeigt.
Anwendungsbeispiel in Aktivität:
Hoffe, dass dies für jemanden nützlich sein wird.
quelle
Meine Handlerklasse für die Anforderung mehrerer Berechtigungen. Sie können die vollständige Verwendung hier überprüfen
quelle
Die folgende Methodik handelt von
Erstellen Sie eine "statische" Klasse für Berechtigungsmethoden
In MainActivity.java
quelle
Klicken Sie auf diesen Link, um mehr über die Mehrfachberechtigung und den vollständigen Download des Quellcodes zu erfahren. Klicken Sie hier
quelle
Jede Situation überprüfen
Wenn abgelehnt - Zeigt dem Benutzer das Dialogfeld "Warnung" an, warum wir eine Berechtigung benötigen
Überprüfen der Berechtigungsergebnisse
quelle
Es ist nichts Falsches an Antworten, die nach mehreren Berechtigungen fragen, aber der Ergebniscode für mehrere Berechtigungen ist nicht sehr elegant implementiert und kann dazu führen, dass das falsche Berechtigungsergebnis überprüft wird.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
Es ist eine schreckliche Logik, das Ergebnis mehrerer Berechtigungen zu überprüfen. Ich weiß nicht, warum Google einen so schrecklichen Code implementiert hat.Es ist ein Chaos, besonders wenn Sie mehrere Berechtigungen überprüfen. Lassen Sie sagen , Sie fragen nach
CAMERA
,ACCESS_FINE_LOCATION
undACCESS_NETWORK_STATE
.Sie müssen nachsehen,
ACCESS_FINE_LOCATION
aber der Benutzer wird nurCAMERA
beim ersten Durchlauf gewährt , und Sie müssen nachsehen,grantResults[1]
aber im zweiten DurchlaufACCESS_FINE_LOCATION
wird die Berechtigung mit Index 0. Ich habe so viele Probleme damit, dass der Benutzer nicht alle Berechtigungen auf einmal erteilt und so eine sinnlose Berechtigungsergebnislogik schreiben muss.Sie sollten entweder verwenden
Oder einfacher
in
onPermissionRequestResult
Methode.quelle
Nachdem ich all die langen und komplexen Antworten gesehen habe. Ich möchte diese Antwort posten.
RxPermission ist derzeit eine weit verbreitete Bibliothek, um in einem Zeilencode um Erlaubnis zu bitten.
fügen Sie in Ihre
build.gradle
Ist das nicht einfach?
quelle
Ich habe einfachen Code für mehrere Berechtigungen auf einmal erfolgreich implementiert. Befolgen Sie die folgenden Schritte 1: Erstellen Sie die Utility.java-Klasse wie unten
2: Jetzt anrufen
in Ihrer Aktivität onCreate () oder gemäß Ihrer Logik.
3: Überprüfen Sie nun die Berechtigung, bevor Sie den Vorgang für eine bestimmte Aufgabe ausführen
4: Implementieren Sie nun die Methode onRequestPermissionsResult () in Ihrer Aktivität wie folgt
quelle
Kurz und bündig :). woran ich glaube.
quelle
quelle
Ich habe festgestellt, dass dies im Beispiel für Laufzeitberechtigungen von Googles Github enthalten ist.
quelle
Überprüfen Sie den Abschnitt "Nach mehreren Berechtigungen gleichzeitig fragen" in diesem Artikel:
Dinge, die Sie über Android M-Berechtigungen wissen müssen
Es ist sehr gut erklärt und kann auch andere verwandte Themen berühren, über die Sie nicht nachgedacht haben.
quelle
Verwenden Sie einen solchen Helfer (Berechtigungsnamen spielen keine Rolle).
}}
quelle
Einfache Möglichkeit, um Mehrfachberechtigung zu bitten,
https://github.com/sachinvarma/EasyPermission
Wie man hinzufügen :
So bitten Sie um Erlaubnis:
Für weitere Details ->
https://github.com/sachinvarma/EasyPermission/blob/master/app/src/main/java/com/sachinvarma/easypermissionsample/MainActivity.java
Es kann jemandem in Zukunft helfen.
quelle
In Kotlin:
quelle
Das habe ich in meiner Tätigkeit getan. Hoffen wird hilfreich sein. Ich bitte um Kamera- und Mikrofonberechtigungen.
quelle
Sie können Dexter verwenden
In
build.gradle
add:Und verwenden Sie es in Ihrer Aktivität als:
quelle