Gegen den traditionellen Ansatz, den Benutzer aufzufordern, zur Einstellungsseite zu wechseln, Ortungsdienste zu aktivieren und wieder zurückzukehren, habe ich in einigen der neuesten Apps eine einfachere Möglichkeit festgestellt, dasselbe zu tun.
Unter Bezugnahme auf den folgenden Screenshot wird dem Benutzer ein Dialogfeld angezeigt, in dem die Ortungsdienste mit nur einem Klick aktiviert werden. In diesen Apps funktioniert dies.
Wie kann ich das gleiche erreichen?
Antworten:
Dieser Dialog wird von LocationSettingsRequest.Builder erstellt , der in den Google Play Services verfügbar ist.
Sie müssen Ihrer App eine Abhängigkeit hinzufügen
build.gradle
:Dann können Sie dieses minimale Beispiel verwenden:
Das vollständige Beispiel finden Sie hier .
quelle
You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
app
Befolgen Sie die unten genannten Schritte
1) Erstellen Sie eine
LocationRequest
nach Ihren Wünschen2) Erstellen Sie eine
LocationSettingsRequest.Builder
3) Erhalten Sie
LocationSettingsResponse
Task
folgenden CodeHinweis:
LocationServices.SettingsApi
ist veraltet, verwenden SieSettingsClient
stattdessen.4) Fügen Sie a hinzu
OnCompleteListener
, um das Ergebnis aus der Aufgabe zu erhalten. Wenn der VorgangTask
abgeschlossen ist, kann der Client die Standorteinstellungen überprüfen, indem er den Statuscode desLocationSettingsResponse
Objekts überprüft .FALL 1 ::
LocationSettingsStatusCodes.RESOLUTION_REQUIRED
Standort ist nicht aktiviert, aber wir können den Benutzer bitten, den Standort zu aktivieren, indem er ihn auffordert, den Standort mit dem Dialogfeld einzuschalten (durch AufrufenstartResolutionForResult
).FALL 2 :: Die
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE
Standorteinstellungen sind nicht erfüllt. Wir haben jedoch keine Möglichkeit, die Einstellungen zu korrigieren, sodass der Dialog nicht angezeigt wird.5)
OnActivityResult
Wir können die Benutzeraktion im Dialogfeld "Standorteinstellungen" abrufen.RESULT_OK
=> Benutzer hat den Standort aktiviert.RESULT_CANCELLED
- Der Benutzer lehnte die Anforderung der Standorteinstellung ab.quelle
Es funktioniert ähnlich wie bei Google Maps
Fügen Sie die Abhängigkeit in der Datei build.gradle hinzu
Dies oder das
quelle
Variable Aussage
Öffnen Sie den Dialog mit dem folgenden Code
onActivityResult
quelle
rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)
AufrufsstartIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null)
wird er sonstonActivityResult()
nicht aufgerufen.startIntentSenderForResult
in der Methode zu verwendenopenGpsEnableSetting()
?openGpsEnableSetting()
einfach ein Dialog gestartet, um die GPS-Einstellungen zu aktivieren. Nachdem es beendet ist,onActivityResult()
wird mit aufgerufenrequestCode == REQUEST_ENABLE_GPS
.onActivityResult()
wird von Activity aufgerufen und ich habe mich gefragt, ob es möglich ist, das Ergebnis an dasFragment
Gleiche zurückzugebenstartIntentSenderForResult
.Vielen Dank an Mattia Maestrini +1
Xamarinlösung:
HINWEIS:
Dies funktioniert nicht mit Huawei oder anderen Geräten, auf denen keine Google-Dienste installiert sind.
quelle
using android.Gms.Common.Apis; using Android.Gms.Location;
? ErhaltenLocationServices.SettingsApi.CheckLocationSettings
Sie nach dem Anruf einen Rückruf innerhalbresult.SetResultCallback(
? Platzieren Sie an jedem einen Haltepunkt und überprüfen Sie, was der Code tutAndroid Marshmallow 6 unterstützt die Laufzeitberechtigung. Laufzeitberechtigungen funktionieren nur auf Marshmallow und vor Marshmallow funktioniert es immer noch auf die alte Art und Weise.
Weitere Informationen finden Sie in diesem offiziellen Video für Android-Entwickler:
https://www.youtube.com/watch?v=C8lUdPVSzDk
Und um Erlaubnis bitten: http://developer.android.com/training/permissions/requesting.html
quelle
Vielen Dank an Mattia Maestrini für die Antwort, die ich gerne mit hinzufügen möchte
compile 'com.google.android.gms:play-services-location:8.1.0'
würde genügen. Dies verhindert, dass Ihre App unnötige Bibliotheken enthält, und hilft, die Anzahl Ihrer Methoden niedrig zu halten.
quelle
Kotlin-Lösung
Hinzufügen
build.gradle(Module:app)
Danach erstellen Sie diese Funktion
quelle
Mit dem kürzlich durchgeführten Marshmallow-Update muss Ihre App auch bei aktivierter Standorteinstellung explizit um Erlaubnis bitten. Die empfohlene Methode hierfür besteht darin, den Abschnitt Berechtigungen Ihrer App anzuzeigen, in dem der Benutzer die Berechtigung nach Bedarf umschalten kann. Das Code-Snippet dafür lautet wie folgt:
Und überschreiben Sie die
onRequestPermissionsResult
Methode wie folgt:Ein anderer Ansatz ist, dass Sie mit SettingsApi auch abfragen können, welche Standortanbieter aktiviert sind. Wenn keine aktiviert ist, können Sie einen Dialog auffordern, um die Einstellung in der App zu ändern.
quelle
Der einfachste Weg, den ich während meiner Recherche gefunden habe, besteht darin, eine Util-Klasse für diesen Standortanforderungsprozess zu erstellen und sie dann aufzurufen, um das GPS für uns einzuschalten.
Bitte überprüfen Sie diesen Blog! Es erzählte die ganze Geschichte.
quelle