Tworzę aplikację na system operacyjny Android. Nie wiem, jak sprawdzić, czy Usługi lokalizacyjne są włączone, czy nie.
Potrzebuję metody, która zwraca „prawda”, jeśli są włączone, i „fałsz”, jeśli nie (więc w ostatnim przypadku mogę wyświetlić okno dialogowe, aby je włączyć).
Odpowiedzi:
Możesz użyć poniższego kodu, aby sprawdzić, czy dostawca GPS i dostawcy sieci są włączeni, czy nie.
W pliku manifestu musisz dodać następujące uprawnienia
źródło
lm.getAllProviders().contains(LocationManager.GPS_PROVIDER)
(lubNETWORK_PROVIDER
) upewni się, że użytkownik nie wyrzuci użytkownika na stronę ustawień, na której nie ma opcji sieci.Settings.ACTION_SECURITY_SETTINGS
powinno byćSettings.ACTION_LOCATION_SOURCE_SETTINGS
Używam tego kodu do sprawdzania:
źródło
Tak jak teraz w 2020 roku
Najnowsza, najlepsza i najkrótsza droga to
źródło
LocationManager.class
wgetSystemService
sposób, ponieważ wymaga połączenia API 23 ;-)Możesz użyć tego kodu, aby skierować użytkowników do Ustawień, gdzie mogą włączyć GPS:
źródło
isProviderEnabled()
igetProviders(true)
.isProviderEnabled()
igetProviders(true)
metod, gdy takie ustawienie jest włączone (lub wyłączone, w zależności od tego, jak na to spojrzysz), byłbym bardzo ciekawy, aby dowiedzieć się, co napotkałeś.Przeprowadź migrację do Androida X i użyj
i użyj LocationManagerCompat
W java
W Kotlinie
źródło
Before API version LOLLIPOP [API Level 21], this method would throw SecurityException if the location permissions were not sufficient to use the specified provider.
jeśli nie masz uprawnień dla sieci lub dostawcy GPS, może zgłosić wyjątek, w zależności od tego, które jest włączone. Sprawdź kod źródłowy, aby uzyskać więcej informacji.Opracowując powyższą odpowiedź, w API 23 należy dodać „niebezpieczne” kontrole uprawnień, a także sprawdzenie samego systemu:
źródło
Jeśli żaden dostawca nie jest włączony, „pasywny” jest najlepszym zwróconym dostawcą. Zobacz https://stackoverflow.com/a/4519414/621690
źródło
Tak, możesz sprawdzić poniżej to kod:
za zgodą w pliku manifestu:
źródło
To, jeśli klauzula łatwo sprawdza, czy moim zdaniem usługi lokalizacyjne są dostępne:
źródło
Używam takiego sposobu dla NETWORK_PROVIDER, ale możesz dodać i dla GPS .
W onCreate umieściłem
I metoda sprawdzania
źródło
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Jest to bardzo przydatna metoda, która zwraca „
true
”, jeśliLocation services
są włączone:źródło
Aby uzyskać bieżącą lokalizację geograficzną w mapach Google na Androida, należy włączyć opcję lokalizacji urządzenia. Aby sprawdzić, czy lokalizacja jest włączona, możesz po prostu wywołać tę metodę ze swojej
onCreate()
metody.źródło
Dla kotlina
dialog
zadzwoń w ten sposób
Wskazówka: okno dialogowe wymaga następującego importu (studio Android powinno to obsłużyć)
W manifeście potrzebujesz następujących uprawnień
źródło
Możesz poprosić o aktualizację lokalizacji i wyświetlić okno dialogowe razem, podobnie jak pliki GoogleMaps. Oto kod:
Jeśli potrzebujesz więcej informacji, sprawdź klasę LocationRequest .
źródło
używam pierwszego kodu rozpocząć tworzenie metody isLocationEnabled
i sprawdzam Warunek, jeśli otwiera mapę i fałsz daje zamiar ACTION_LOCATION_SOURCE_SETTINGS
źródło
Można to zrobić w najprostszy sposób
źródło
Jeśli używasz systemu AndroidX, użyj poniższego kodu, aby sprawdzić, czy usługa lokalizacji jest włączona, czy nie:
źródło
Aby sprawdzić dostawcę sieci, wystarczy zmienić ciąg przekazany na isProviderEnabled do LocationManager.NETWORK_PROVIDER, jeśli zaznaczysz wartości zwracane zarówno dla dostawcy GPS, jak i dostawcy sieci - oba false oznaczają brak usług lokalizacyjnych
źródło
źródło
źródło
}
Użyj metody isLocationEnabled, aby wykryć, że usługi lokalizacyjne są włączone.
Strona https://github.com/Polidea/RxAndroidBle/issues/327# poda więcej informacji, dlaczego nie skorzystać z dostawcy pasywnego, zamiast korzystać z trybu lokalizacji.
źródło