Ich arbeite derzeit an einer Anwendung, für die mehrere "gefährliche" Berechtigungen erforderlich sind. Also habe ich versucht, "Bitte um Erlaubnis" hinzuzufügen, wie in Android Marshmallow (API Level 23) erforderlich, konnte aber nicht finden, wie das geht.
Wie kann ich mithilfe eines neuen Berechtigungsmodells in meiner App um Erlaubnis bitten?
Antworten:
Öffnen Sie einen Dialog mit dem folgenden Code:
Erhalten Sie das Aktivitätsergebnis wie folgt:
Weitere Informationen: https://developer.android.com/training/permissions/requesting.html
quelle
ActivityCompat.requestPermissions
veraltet? (in Nugat)Diese Struktur verwende ich, um zu überprüfen, ob meine App über eine Berechtigung verfügt, und um anzufordern, ob sie keine Berechtigung hat. Also in meinem Hauptcode, von wo aus ich überprüfen möchte, schreibe folgendes:
Das Modul checkIfAlreadyhavePermission () ist implementiert als:
Das Modul requestForSpecificPermission () ist implementiert als:
und Überschreiben der Aktivität:
Weitere Informationen finden Sie unter diesem Link: http://revisitingandroid.blogspot.in/2017/01/how-to-check-and-request-for-run-time.html
quelle
checkIfAlreadyhavePermission
anreturn result == PackageManager.PERMISSION_GRANTED;
Ich habe diesen Wrapper (empfohlen) verwendet, der von Google-Entwicklern geschrieben wurde. Es ist super einfach zu bedienen.
https://github.com/googlesamples/easypermissions
Funktion zur Überprüfung und bei Bedarf um Erlaubnis bitten
Viel Spaß beim Codieren :)
quelle
Ab Android Marshmallow müssen wir den Benutzer nach bestimmten Berechtigungen fragen. Wir können auch den Code überprüfen, wenn die Erlaubnis bereits erteilt wurde. Hier ist eine Liste häufig benötigter Berechtigungen:
Hier ist ein Beispielcode zum Überprüfen der Berechtigungen:
quelle
Meine Klasse für Anforderungslaufzeitberechtigungen in
Activity
oderFragment
Es hilft auch Ihnen zeigen , Gründe oder offene Einstellung Erlaubnis zu aktivieren , nachdem Benutzer eine Erlaubnis (mit / ohne verweigert
Never ask again
) Option leichterVerwenden in
Activity
wieCode auf Github
Demo
quelle
Android-M, dh API 23 führte Laufzeitberechtigungen ein zur Reduzierung von Sicherheitslücken in Android-Geräten eingeführt, mit denen Benutzer App-Berechtigungen jetzt zur Laufzeit direkt verwalten können. Wenn der Benutzer eine bestimmte Berechtigung Ihrer Anwendung verweigert, müssen Sie diese abrufen, indem Sie im Berechtigungsdialog nachfragen das haben Sie in Ihrer Anfrage erwähnt.
So überprüfen , bevor Aktion dh überprüfen Sie die Berechtigung Zugriff auf die Ressource Link und wenn die Anwendung nicht , dass bestimmte Berechtigung hat können Sie die Erlaubnis anfordern Link und behandeln die die Berechtigungen anfordern Antwort wie unten.
Schließlich ist es eine gute Praxis, Verhaltensänderungen durchzuführen wenn Sie mit neuen Versionen arbeiten möchten, um das Schließen von Gewalt zu vermeiden :)
Best Practices für Berechtigungen.
Sie können die offizielle Beispiel-App hier durchgehen .
quelle
Ab Android Marshmallow (API 23) und höher sind standardmäßig alle gefährlichen Berechtigungen (gemäß offiziellem Dokument, offiziellem Dokument ) deaktiviert. Nach der Installation, wenn die App zum ersten Mal geöffnet wird, müssen Sie zur Laufzeit die Berechtigung erteilen.
Ich habe folgendes erreicht:
IN Ihrer Aktivitätsklasse:
quelle
Fügen Sie die Berechtigungen zur Datei AndroidManifest.xml hinzu
So überprüfen Sie die Android-Version, ob eine Laufzeitberechtigung erforderlich ist oder nicht.
Bitten Sie den Benutzer, die Berechtigung zu erteilen, wenn sie nicht erteilt wurde.
Tun Sie etwas, wenn die Erlaubnis erteilt wurde oder nicht.
quelle
Ich benutze dies als Basisfragmentklasse. Ich bitte nur um Berechtigungen für ein Fragment, aber Sie können es umgestalten und eine ähnliche Aktivitätsversion erstellen.
Es gibt zwei Schlüsselmethoden, die Sie verwenden sollten:
hasPermissionOrWillAsk - Verwenden Sie diese Option, um festzustellen, ob eine Berechtigung von einem Benutzer angefordert und verweigert wurde, der nicht erneut gefragt werden möchte. Dies ist nützlich, um die Benutzeroberfläche zu deaktivieren, wenn der Benutzer seine endgültige Antwort gegeben hat, dass er keine Funktion wünscht.
runNowOrAskForPermissionsFirst - Verwenden Sie diese Option, um Code auszuführen, für den Berechtigungen erforderlich sind. Wenn der Benutzer bereits eine Berechtigung erteilt hat, wird der Code sofort ausgeführt. Andernfalls wird der Code später ausgeführt, wenn der Benutzer die Berechtigung erteilt. Oder gar nicht. Es ist schön, weil Sie den Code an einer Stelle angeben.
Hier ist ein Beispiel:
Freut mich über Feedback dazu. Nicht, dass dieses spezielle Beispiel ein wenig vereinfacht wäre, da Sie auch überprüfen müssen, ob die Ortungsdienste auf dem Gerät aktiviert sind. (Das unterscheidet sich von Berechtigungen.) Außerdem wird jeweils nur eine Berechtigung unterstützt, sie kann jedoch einfach geändert werden, wenn Sie mehrere Berechtigungen gleichzeitig unterstützen müssen.
quelle
Es kann ein sauberer Weg sein. Fügen Sie alle Ihre Berechtigungen in einem Array wie hinzu
Unabhängig von Ihrer Berechtigung erstellen Sie eine Methode für jede Berechtigung
Rufen Sie diese Methode in onCreate auf
Überschreiben Sie jetzt onRequestPermissionsResult
quelle
Für mehrere Berechtigungen gleichzeitig können Sie diese verwenden. Diese Arbeit für mich .. Ich habe eine andere Lösung. Wenn Sie Ihr targetSdkVersion unten 22 angeben, funktioniert es für mich. und es verhält sich so, als würde man die Erlaubnis von manifest.xml erhalten. Getestet und funktioniert für mich.
Für mehr Details. Überprüfen Sie den folgenden Link
https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
quelle
Um die Laufzeitberechtigung zu verwalten, hat Google ein Bibliotheksprojekt bereitgestellt. Sie können dies von hier aus überprüfen: https://github.com/googlesamples/easypermissions
EasyPermissions wird installiert, indem Ihrer build.gradle-Datei die folgende Abhängigkeit hinzugefügt wird:
Um EasyPermissions zu verwenden, muss Ihre Aktivität (oder Ihr Fragment) die onRequestPermissionsResult-Methode überschreiben:
Hier erhalten Sie ein funktionierendes Beispiel für die Funktionsweise dieser Bibliothek unter https://github.com/milon87/EasyPermission
quelle
Es gibt eine gute Bibliothek, die verwendet werden kann, wenn Berechtigungen abgefragt werden müssen, wenn ein Hintergrunddienst Berechtigungen benötigt. Obwohl eine Einschränkung der Bibliothek darin besteht, dass nicht nur bestimmt werden kann, ob der App derzeit Berechtigungen erteilt werden oder nicht. Der Benutzer wird immer gefragt, ob die App diese noch nicht hat.
Probieren Sie es aus, es macht das Leben einfacher: Android-Berechtigungen
quelle
Dieser Code unten funktioniert perfekt. Ich erkläre anhand eines Beispiels.
In meinem Fall habe ich die Berechtigungsprüfungen separat in eine util-Klasse eingefügt und die spezifischen Berechtigungen übergeben, die ich von den entsprechenden Klassen prüfen muss. Dadurch konnte die util-Überprüfungsdatei für Berechtigungen in der gesamten Anwendung wiederverwendet werden.
Der folgende Codeteil zeigt den Funktionsaufruf. In diesem Fall bitte ich um
android.Manifest.permission.READ_EXTERNAL_STORAGE
Erlaubnis.Im obigen Fall wird die Berechtigung geprüft, ob sie zulässig ist
onAttachPressed();
ist. Andernfalls wird die Anforderungsberechtigung überprüft.Das Folgende ist der Code, der in meinem Fall in der util-Klasse vorhanden ist
PermissionUtils
Und nach der Anfrage, ob Sie die Funktion von aufrufen möchten
onRequestPermissionsResult
oder müssen Sie die Taste für den Funktionsaufruf erneut drücken.Rufen Sie es einfach an
onRequestPermissionsResult
quelle
Ich verwende die RxPermission- Bibliotheksbibliothek, um um Erlaubnis zu bitten. Weil es langer Code ist, den wir schreiben müssen, um um Erlaubnis zu bitten.
Fügen Sie diese Abhängigkeit in Ihre
build.gradle
quelle
Versuche dies
Dies ist der einfachste Weg, um in der Marshmallow-Version um Erlaubnis zu bitten.
Hinweis: - Vergessen Sie nicht, dieselbe Berechtigung auch in die Manifestdatei aufzunehmen
Zweiter Methodencode zur Überprüfung der Berechtigung wird erteilt oder nicht?
Und überschreiben Sie die Methode
quelle
Einfache Möglichkeit, um Erlaubnis zu bitten, indem Sie vermeiden, viel Code zu schreiben.
https://github.com/sachinvarma/EasyPermission
Wie man hinzufügen :
So bitten Sie um Erlaubnis:
Ich hoffe, es wird für jemanden hilfreich sein.
quelle
Ich habe alle Antworten durchgesehen, aber meine genau benötigte Antwort nicht erfüllt. Hier ist ein Beispiel, das ich geschrieben habe und das perfekt funktioniert. Selbst der Benutzer klickt auf das Kontrollkästchen Nicht mehr fragen .
Erstellen Sie eine Methode, die aufgerufen wird, wenn Sie nach einer Laufzeitberechtigung fragen möchten,
readContacts()
oder wie folgtopenCamera()
:Jetzt müssen wir machen
askContactsPermission()
, Sie können es auch alsaskCameraPermission()
oder welche Erlaubnis Sie auch immer benennen werden, benennen .Stellen Sie vor dem Schreiben dieser Funktion sicher, dass Sie die folgende Instanzvariable wie folgt definiert haben:
Nun letzter Schritt zum Überschreiben der
onRequestPermissionsResult
Methode wie unten gezeigt:Hier sind wir mit den RunTime-Berechtigungen fertig. Das Addon
openPermissionSettingDialog()
öffnet einfach den Einstellungsbildschirm, wenn der Benutzer die Berechtigung dauerhaft deaktiviert hat, indem er auf das Kontrollkästchen Nicht mehr fragen klickt . unten ist die Methode:Was haben wir vermisst? 1. Definieren Sie die verwendeten Zeichenfolgen in
strings.xml
Initialisierung der
parentLayout
Variablen innerhalb deronCreate
MethodeparentLayout = findViewById (R.id.content);
Definieren der erforderlichen Berechtigung in
AndroidManifest.xml
Die
queryContacts
Methode, basierend auf Ihrem Bedarf oder der Laufzeitberechtigung, können Sie Ihre Methode aufrufen, vor der diepermission
benötigt wurde. In meinem Fall benutze ich einfach den Lader, um den Kontakt wie unten gezeigt abzurufen:Das funktioniert super fröhliches Codieren :)
quelle
quelle
Sie können meine Bibliothek verwenden - NoPermission (Es ist nur eine Klasse)
compile 'ru.alexbykov:nopermission:1.1.1'
Stichprobe
onRequestPermissionResult:
Ich denke, API bequemer als
EasyPermissions
von Google.quelle
Laufzeitberechtigung überall in der Anwendung Hier ist ein Beispiel
und Code wie folgt aufrufen:
Sie können mehr Github finden
quelle
Die Laufzeitberechtigung erzeugt in Aktivitäten viel Code, der stark gekoppelt ist. Um den Code zu reduzieren und die Sache zu vereinfachen, können Sie die Dexter- Bibliothek verwenden.
quelle
RUNTIME PERMISSION IN ANDROID
Die OnClick-Methode dient zum Überprüfen der Laufzeitberechtigung
und wenn die Berechtigung eingeschränkt ist, wird die Berechtigung angefordert
quelle
Wenn Sie AndroidX Activity 1.2.0 oder AndroidX Fragment 1.3.0 verwenden :
Es gibt neue Aktivitätsergebnis-APIs, mit denen Sie nach Berechtigungen fragen können:
quelle