W przeciwieństwie do tradycyjnego podejścia polegającego na zachęcaniu użytkownika do przejścia do strony ustawień, włączenia usług lokalizacyjnych i powrotu, zauważyłem prostszy sposób zrobienia tego samego w niektórych najnowszych aplikacjach.
Nawiązując do poniższego zrzutu ekranu, wyświetla okno dialogowe do użytkownika, aby włączyć usługi lokalizacyjne za pomocą jednego kliknięcia i działa w tych aplikacjach.
Jak mogę osiągnąć to samo?
Odpowiedzi:
To okno dialogowe jest tworzone przez LocationSettingsRequest.Builder dostępny w usługach Google Play.
Musisz dodać zależność do swojej aplikacji
build.gradle
:Następnie możesz użyć tego minimalnego przykładu:
Pełny przykład można znaleźć tutaj .
źródło
You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
app
Wykonaj czynności wymienione poniżej
1) Utwórz
LocationRequest
zgodnie ze swoim życzeniem2) Utwórz plik
LocationSettingsRequest.Builder
3) Pobierz
LocationSettingsResponse
Task
poniższy kodUwaga:
LocationServices.SettingsApi
jest przestarzałe, więc użyjSettingsClient
Zamiast tego.4) Dodaj,
OnCompleteListener
aby uzyskać wynik z zadania. PoTask
zakończeniu klient może sprawdzić ustawienia lokalizacji, patrząc na kod stanu zLocationSettingsResponse
obiektu.PRZYPADEK 1::
LocationSettingsStatusCodes.RESOLUTION_REQUIRED
Lokalizacja nie jest włączona, ale możemy poprosić użytkownika o włączenie lokalizacji, zachęcając go do włączenia lokalizacji za pomocą okna dialogowego (dzwoniącstartResolutionForResult
).PRZYPADEK 2::
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE
ustawienia lokalizacji są niezadowalające. Nie mamy jednak możliwości naprawienia ustawień, więc nie pokażemy tego okna.5)
OnActivityResult
możemy uzyskać akcję użytkownika w oknie dialogowym ustawień lokalizacji.RESULT_OK
=> Użytkownik włączył lokalizację.RESULT_CANCELLED
- Użytkownik odrzucił prośbę o ustawienie lokalizacji.źródło
Działa podobnie do map Google
Dodaj zależności w pliku build.gradle
to czy tamto
źródło
Deklaracja zmiennej
Otwórz okno dialogowe, używając poniższego kodu
onActivityResult
źródło
rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)
callstartIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null)
, w przeciwnym razieonActivityResult()
nie zostanie wywołany.startIntentSenderForResult
w metodzie czegoś podobnegoopenGpsEnableSetting()
?openGpsEnableSetting()
po prostu uruchamia się okno dialogowe umożliwiające włączenie ustawień GPS. Po zakończeniuonActivityResult()
jest wywoływana za pomocąrequestCode == REQUEST_ENABLE_GPS
.onActivityResult()
jest wywoływana z Activity i zastanawiałem się, czy możliwe jest zwrócenie wyniku doFragment
podobnegostartIntentSenderForResult
.Dzięki Mattia Maestrini +1
Rozwiązanie Xamarin:
UWAGA:
To nie zadziała z Huawei ani innymi urządzeniami, na których nie zainstalowano usług Google.
źródło
using android.Gms.Common.Apis; using Android.Gms.Location;
? Czy po zakończeniu rozmowyLocationServices.SettingsApi.CheckLocationSettings
otrzymasz oddzwonienie w ciąguresult.SetResultCallback(
? Umieść punkt przerwania w każdym z nich i sprawdź, co robi kodAndroid Marshmallow 6 obsługuje uprawnienia wykonawcze. Uprawnienia wykonawcze działają tylko na Marshmallow, a na wersji przed Marshmallow nadal działa w stary sposób.
Możesz dowiedzieć się więcej na ten temat w tym oficjalnym filmie dla programistów Androida:
https://www.youtube.com/watch?v=C8lUdPVSzDk
I prośba o pozwolenie: http://developer.android.com/training/permissions/requesting.html
źródło
Dziękuję Mattii Maestrini za odpowiedź, chciałbym to dodać używając
compile 'com.google.android.gms:play-services-location:8.1.0'
wystarczy. Zapobiega to dołączaniu do aplikacji niepotrzebnych bibliotek i pomaga utrzymać niską liczbę metod.
źródło
Rozwiązanie Kotlin
Dodaj
build.gradle(Module:app)
następnie utwórz tę funkcję
źródło
Dzięki ostatniej aktualizacji Marshmallow, nawet gdy ustawienie Lokalizacja jest włączone, Twoja aplikacja będzie wymagać wyraźnego zapytania o pozwolenie. Zalecanym sposobem, aby to zrobić, jest wyświetlenie sekcji Uprawnienia aplikacji, w której użytkownik może przełączać uprawnienia zgodnie z wymaganiami. Fragment kodu służący do tego jest następujący:
I nadpisz
onRequestPermissionsResult
metodę jak poniżej:Innym podejściem jest to, że możesz również użyć SettingsApi, aby zapytać, którzy dostawcy lokalizacji są włączeni. Jeśli żadna nie jest włączona, możesz wyświetlić okno dialogowe, aby zmienić ustawienie z poziomu aplikacji.
źródło
Najprostszym sposobem, jaki znalazłem podczas moich badań, jest utworzenie klasy Util dla tego procesu żądającego lokalizacji, a następnie wywołanie jej, aby włączyć GPS.
Sprawdź ten blog! Opowiedział całą historię.
źródło