Jeśli aplikacja musi prosić o dostęp do lokalizacji lub zaktualizować uprawnienia,
Urządzenie musi włączyć odpowiednie ustawienia systemu, takie jak GPS lub Wi-Fi.
skanowanie. Zamiast bezpośrednio włączać usługi, takie jak GPS urządzenia,
aplikacja określa wymagany poziom dokładności/zużycie energii oraz
odpowiedni interwał aktualizacji, a urządzenie automatycznie
zmian w ustawieniach systemu. Te ustawienia są definiowane przez
LocationRequest
obiektu danych.
Z tej lekcji dowiesz się, jak korzystać z funkcji Klient ustawień aby sprawdzić, które ustawienia są włączone, i wyświetlić Ustawienia lokalizacji użytkownik może zaktualizować ustawienia jednym kliknięciem.
Skonfiguruj usługi lokalizacyjne
w celu korzystania z usług lokalizacyjnych dostępnych w ramach Usług Google Play oraz u dostawcy uśrednionej lokalizacji połącz aplikację za pomocą Klient ustawień, sprawdź bieżące ustawienia lokalizacji i poproś użytkownika o włączenie wymagane ustawienia.
Aplikacje, które korzystają z usług lokalizacyjnych, muszą poprosić o dostęp do lokalizacji, w zależności od przypadku użycia tych funkcji.
Skonfiguruj prośbę o lokalizację
Aby przechowywać parametry żądań wysyłanych do dostawcy uśrednionej lokalizacji, utwórz
LocationRequest
Parametry te określają poziom dokładności żądań lokalizacji. Dla:
szczegóły wszystkich dostępnych opcji próśb o lokalizację, zobacz
LocationRequest
odniesienie do klasy. Ta lekcja ustawia interwał aktualizacji, czyli najszybszą aktualizację.
i priorytetu, jak opisano poniżej:
- Przerwa aktualizacji
-
setInterval()
. - Ta metoda ustawia w milisekundach preferowany czas wykonywania otrzymywać aktualizacje lokalizacji. Pamiętaj, że aktualizacje lokalizacji mogą być lub wolniej, by zoptymalizować wykorzystanie baterii. w ogóle nie będzie się aktualizować (jeśli na przykład urządzenie nie ma połączenia z siecią). - Najszybszy interwał aktualizacji
-
setFastestInterval()
. – Ta metoda ustawia najszybszą szybkość w milisekundach: które aplikacja może obsługiwać aktualizacje lokalizacji. O ile Twoja aplikacja nie czerpie korzyści z otrzymujesz aktualizacje szybciej niż wynosi częstotliwość określona wsetInterval()
, nie musisz wywoływać tej metody. - Priorytet
-
setPriority()
- Ta metoda określa priorytet żądania, dzięki czemu Google Play usługi lokalizacyjne Google daje wskazówkę dotyczącą tego, z których źródeł chcesz korzystać. Obsługiwane są te wartości:-
PRIORITY_BALANCED_POWER_ACCURACY
- Użyj tego ustawienia, aby żądać dokładnej lokalizacji w obrębie miasta. bloków o szerokości około 100 metrów. To jest uważany za przybliżony poziom dokładności i może zużywać mniej . Gdy to ustawienie jest włączone, usługi lokalizacyjne zwykle używają Wi-Fi i określania położenia stacji bazowych. Pamiętaj jednak, że wybór lokalizacji zależy od wielu innych czynników, takich jak to, które źródła i dostępności informacji. -
PRIORITY_HIGH_ACCURACY
– To ustawienie służy do wyświetlania prośby o najdokładniejszą możliwą lokalizację. Na to ustawienie spowoduje, że usługi lokalizacyjne będą częściej korzystać z GPS-u. aby określić lokalizację. PRIORITY_LOW_POWER
- To ustawienie służy do określania precyzji na poziomie miasta, która jest z dokładnością do około 10 kilometrów. Uznaje się to za przybliżony poziom dokładności, co prawdopodobnie zużywa mniej energii.PRIORITY_NO_POWER
– Używaj tego ustawienia, jeśli potrzebujesz niewielkiego wpływu na zużycie energii. , ale chcesz też otrzymywać aktualne informacje o lokalizacji. W związku z tym aplikacja nie aktualizuje żadnych lokalizacji, ale odbiera lokalizacje aktywowane przez inne aplikacje.
-
Utwórz żądanie lokalizacji i ustaw parametry jak w tym przykładzie przykładowy kod:
Kotlin
fun createLocationRequest() { val locationRequest = LocationRequest.Builder() .setIntervalMillis(10000) .setFastestIntervalMillis(5000) .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .build() }
Java
protected void createLocationRequest() { LocationRequest locationRequest = LocationRequest.Builder() .setIntervalMillis(10000) .setFastestIntervalMillis(5000) .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .build(); }
Priorytet
PRIORITY_HIGH_ACCURACY
w połączeniu z
ACCESS_FINE_LOCATION
określonych w manifeście aplikacji oraz szybkie aktualizacje
odstęp 5000 milisekund (5 sekund), sprawia, że uśredniona lokalizacja
na bieżąco przesyłać aktualne informacje o lokalizacji z dokładnością do kilku metrów.
Ta metoda jest odpowiednia w przypadku aplikacji mapowych, które wyświetlają lokalizację
w czasie rzeczywistym.
Wskazówka dotycząca wydajności: jeśli aplikacja uzyskuje dostęp do lub inne długotrwałe działania po otrzymaniu aktualizacji lokalizacji. do ustawienia wolniejszej wartości. Ta zmiana uniemożliwia których nie może używać. Po zakończeniu długotrwałej pracy ustaw najkrótszy interwał z powrotem na szybką wartość.
Pobierz bieżące ustawienia lokalizacji
Gdy połączysz się z Usługami Google Play i usługami lokalizacyjnymi
API, możesz pobrać bieżące ustawienia lokalizacji urządzenia użytkownika. Do zrobienia
to, utwórz
LocationSettingsRequest.Builder
i dodać co najmniej jedną prośbę o lokalizację. Fragment kodu poniżej pokazuje,
, aby dodać prośbę o lokalizację utworzoną w poprzednim kroku:
Kotlin
val builder = LocationSettingsRequest.Builder() .addLocationRequest(locationRequest)
Java
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest);
Następnie sprawdź, czy są aktualne ustawienia lokalizacji:
Kotlin
val builder = LocationSettingsRequest.Builder() // ... val client: SettingsClient = LocationServices.getSettingsClient(this) val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())
Java
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); // ... SettingsClient client = LocationServices.getSettingsClient(this); Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
Gdy Task
aplikacja może sprawdzić ustawienia lokalizacji na podstawie stanu
kod z LocationSettingsResponse
obiektu. Aby uzyskać jeszcze więcej informacji o obecnym stanie kategorii
ustawieniach lokalizacji, aplikacja może wywoływać metodę
LocationSettingsResponse
obiektu
getLocationSettingsStates()
.
Proszenie użytkownika o zmianę ustawień lokalizacji
Określenie, czy ustawienia lokalizacji są odpowiednie dla danej lokalizacji
dodaj
OnFailureListener
do
Task
, który weryfikuje ustawienia lokalizacji. Następnie sprawdź,
jeśli
Exception
obiekt przekazano do
Metoda onFailure()
jest instancją
ResolvableApiException
, która wskazuje, że ustawienia
musi zostać zmieniony. Następnie wyświetl okno z prośbą o udzielenie użytkownikowi uprawnień do
zmienić ustawienia lokalizacji, dzwoniąc pod numer
startResolutionForResult()
Fragment kodu poniżej pokazuje, jak określić, czy lokalizacja użytkownika
ustawienia pozwalają usługom lokalizacyjnym na tworzenie
LocationRequest
, a także o tym, jak poprosić użytkownika o podanie tych informacji
uprawnienia do zmiany ustawień lokalizacji w razie potrzeby:
Kotlin
task.addOnSuccessListener { locationSettingsResponse -> // All location settings are satisfied. The client can initialize // location requests here. // ... } task.addOnFailureListener { exception -> if (exception is ResolvableApiException){ // Location settings are not satisfied, but this can be fixed // by showing the user a dialog. try { // Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). exception.startResolutionForResult(this@MainActivity, REQUEST_CHECK_SETTINGS) } catch (sendEx: IntentSender.SendIntentException) { // Ignore the error. } } }
Java
task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() { @Override public void onSuccess(LocationSettingsResponse locationSettingsResponse) { // All location settings are satisfied. The client can initialize // location requests here. // ... } }); task.addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { if (e instanceof ResolvableApiException) { // Location settings are not satisfied, but this can be fixed // by showing the user a dialog. try { // Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). ResolvableApiException resolvable = (ResolvableApiException) e; resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException sendEx) { // Ignore the error. } } } });
Kolejna lekcja, Odbieranie aktualizacji lokalizacji, programy sposób otrzymywania okresowych aktualizacji lokalizacji.