In Android Marshmallow sollten Berechtigungen zur Laufzeit angefordert werden, wenn sie benötigt werden, und nicht alle auf einmal, wenn eine App installiert wird. Ich kann jedoch scheinbar nur Berechtigungen von einer Aktivität anfordern, was ein Problem darstellt, da meine App nur Dienste enthält. (Warum ist das so, fragen Sie sich vielleicht? In der App ist ein Android Wear-Zifferblatt gebündelt, und das Telefon sucht nur nach Fotos in der Nähe, um sie an die Uhr zu senden - keine Aktivität erforderlich. Es sind jedoch Standortberechtigungen erforderlich.)
Gibt es eine Möglichkeit, Berechtigungen von einem Dienst anzufordern? Oder irgendwie erzwingen, dass die Berechtigungen zur Installationszeit wie in der Vergangenheit erteilt werden?
android
wear-os
android-permissions
android-6.0-marshmallow
Tony Wickham
quelle
quelle
Antworten:
requestPermission()
kann nur von einemActivity
und nicht von einem aufgerufen werdenService
(im Gegensatz dazucheckPermission()
erfordert dies nurPackageManager
). Sie müssen also zusätzliche Arbeit leisten, um dies zu umgehen. Sie müssenActivity
in Ihrer App eine angeben, und SieService
können beispielsweise nach erforderlichen Berechtigungen suchen. Wenn diese noch nicht erteilt wurden, kann eine Benachrichtigung erstellt werden, die den Benutzer mit einer beschreibenden Kurznachricht darüber informiert, warum dies der Fall ist eine Benachrichtigung und was muss passieren, wenn sie auf die Benachrichtigung klicken, usw.quelle
Context
der auch implementiertOnRequestPermissionsResultCallback
. Die Funktionalität ist ähnlich wie beim StandardrequestPermission()
.Ich bin damit einverstanden, dass dies für Dienste sehr problematisch ist. Ich denke, Sie sollten hierfür ein Problem auf der Android Developer Preview-Seite melden.
Im Moment denke ich, dass die beste Lösung darin besteht, die Berechtigung für den Dienst zu überprüfen und eine Benachrichtigung anzuzeigen, wenn die Berechtigung fehlt. Erstellen Sie noch besser eine DialogActivity, um eine Berechtigung anzufordern, wenn Benutzer auf die Benachrichtigung klicken.
quelle
Schauen Sie sich PermissionEverywhere an Bibliothek an. Sie können die Berechtigung in jedem Kontext anfordern.
Es wird ein Benachrichtigungsklick erstellt, auf den eine Aktivität geöffnet wird, in der um eine Erlaubnis gebeten wird.
Beispielcode von der Github-Seite der Bibliothek: -
quelle
PermissionEverywhere
Wenn Sie Probleme mit der Verwendung haben , stellen Sie außerdem sicher, dass Sie die Hilfsaktivität in Ihrem Manifest deklarieren UND dass sie bei der Deklaration an das richtige Paket gebunden ist (wenn Sie siePermissionEverywhere
als separates Paket verwenden). Es hat lange gedauert, bis mir klar wurde, dass ich dasPermissionEverywhere
Paket im Manifest nicht spezifiziert habe .PermissionEverywhere
Demo-App ausgeführt und es hat nicht funktioniert.Es gibt eine sehr einfache Bibliothek, die genau dies ermöglicht. Sie können von überall (auch von einem Dienst) nach Berechtigungen suchen, je nachdem, ob sich die App im Vordergrund oder im Hintergrund befindet. Sie zeigt entweder den normalen Dialog an oder generiert eine Benachrichtigung, in der Sie nach Berechtigungen gefragt werden. Der Code ist sehr einfach zu verstehen und auch sehr einfach zu verwenden.
Probieren Sie es aus: Android-Berechtigungen
quelle
Sie können
ResultReceiver
einen Empfänger für die Antwort des Benutzers erstellen und ihn dann über Benachrichtigungen als Rückruf an die Aktivität weiterleitenPendingIntent
. Referenzquelle