Wiem, że pytanie o włączanie / wyłączanie GPS programowo na Android został już omówiony wiele razy , a odpowiedź jest zawsze taka sama:
„Nie możesz ze względów bezpieczeństwa / prywatności, musisz przekierować do ekranu preferencji lokalizacji i pozwolić użytkownikowi włączyć / wyłączyć to.”
Rozumiem, że jednak Niedawno kupiłem Tasker z rynku, a wśród wielu innych rzeczy, które można osiągnąć z nim, można ustawić reguły do automatycznej włączyć GPS na wejściu wcześniej ustalona aplikacje i wyłącz go na wyjeździe (patrz tutaj dla samouczek, jak to zrobić, i to po prostu działa!), a tej aplikacji nie można podpisać za pomocą klucza podpisywania oprogramowania układowego, ponieważ działa na wielu wersjach Androida i różnych urządzeniach i nie trzeba nawet być zrootowana.
Chciałbym to zrobić w mojej aplikacji. Oczywiście nie chcę naruszać prywatności użytkowników, więc najpierw zapytałbym użytkownika, czy chce go włączyć automatycznie za pomocą typowego pola wyboru „zapamiętaj moją decyzję”, a jeśli odpowie tak, włącz to.
Czy ktoś ma pomysł lub wskazówkę, jak Tasker to osiąga?
Wszystkie te odpowiedzi są teraz niedozwolone. Oto poprawny:
Dla wszystkich, którzy wciąż szukają odpowiedzi:
Oto, jak robią to OLA Cabs i inne tego typu aplikacje.
Dodaj to do swojego onCreate
Oto implmentowane metody:
Oto dokumentacja Androida dla tego samego.
Ma to pomóc innym facetom, jeśli nadal walczą:
Edycja : dodanie komentarza Irfana Razy, aby uzyskać dodatkową pomoc.
źródło
WŁĄCZ GPS:
WYŁĄCZ GPS:
źródło
Ten kod działa na telefonach ZROOTOWANYCH, jeśli aplikacja zostanie przeniesiona na
/system/aps
, i mają one następujące uprawnienia w manifeście :Kod
źródło
Zamiast korzystać z ustawień intencji.ACTION_LOCATION_SOURCE_SETTINGS możesz bezpośrednio wyświetlać wyskakujące okienka w swojej aplikacji, takie jak Google Map i GPS po kliknięciu przycisku OK, nie ma potrzeby przekierowywania do ustawień, wystarczy użyć mojego kodu jako
Uwaga: ta linia kodu automatycznie otwiera okno dialogowe, jeśli lokalizacja nie jest włączona. Ten fragment linii jest również używany w Mapach Google
źródło
Od wersji Androida 4.4 nie można programowo włączać / wyłączać GPS. Jeśli wypróbujesz kod zaproponowany w tej odpowiedzi , zostanie uruchomiony wyjątek.
źródło
Aby programowo włączać i wyłączać GPS, potrzebujesz dostępu „root” i zainstalowanego BusyBox. Nawet z nimi zadanie nie jest trywialne.
Przykład jest tutaj: Dysk Google , Github , Sourceforge
Testowane na Androidach 2.3.5 i 4.1.2.
źródło
Powyższa poprawna odpowiedź jest bardzo stara, potrzebuje czegoś nowego, więc oto odpowiedź
Podobnie jak w ostatniej aktualizacji, mamy obsługę androidx, więc najpierw dołącz zależności w pliku build.gradle na poziomie aplikacji
następnie dodaj w swoim pliku manifestu:
nie zapomnij przyjąć zgody użytkownika na te uprawnienia, jeśli zwalniasz
teraz tutaj jest kod, po prostu go użyj
jeśli coś pójdzie nie tak, skontaktuj się ze mną
źródło
Odpowiedź została opracowana w innym pytaniu, ale została zamknięta i chciałbym, aby społeczność również ją wypróbowała.
Zobacz ten komentarz
To rozwiązanie wymagałoby uprawnień
WRITE_SETTINGS
iWRITE_SECURE_SETTINGS
.źródło
android.permission.WRITE_SECURE_SETTINGS
pozwolenia w pliku Manifest.Może dzięki sztuczkom refleksyjnym w klasie
android.server.LocationManagerService
.Jest też metoda (od API 8)
android.provider.Settings.Secure.setLocationProviderEnabled
źródło
Settings.Secure
klasa wydaje się obiecująca, jednak pojawia się wyjątek bezpieczeństwa mówiący, że potrzebuję android.permission.WRITE_SECURE_SETTINGS i nadal otrzymuję błąd, nawet dodając to uprawnienie (i WRITE_SETTINGS również) do mojego manifestu. Ale wydaje się, że to dobry sposób na dalsze poszukiwania. Dzięki :)WRITE_SECURE_SETTINGS
ma poziom ochrony, zgodnie zsystemOrSignature
którym musisz uczynić tę aplikację aplikacją systemową, aby działała, o czym również wspomniano w tej odpowiedzi .To najlepsze rozwiązanie oferowane przez
Google Developers
. Po prostu wywołaj tę metodę w onResume z onCreate po zainicjowaniuGoogleApiClient
.Uwaga: ta linia kodu automatycznie otwiera okno dialogowe, jeśli
Location
nie jest włączone. Ten fragment linii jest również używany w Mapach Googleźródło
run time
pozwolenie udzielone.Ten kod działa na telefonach ROOTED:
Aby wyłączyć GPS, możesz użyć tego polecenia
Możesz również przełączać dokładność sieci za pomocą następujących poleceń: do włączenia użytkowania:
a do wyłączenia możesz użyć:
źródło
Od czasu opublikowania tego pytania sytuacja się zmieniła, teraz dzięki nowemu interfejsowi API usług Google możesz monitować użytkowników o włączenie GPS:
https://developers.google.com/places/android-api/current-place
Musisz poprosić o pozwolenie ACCESS_FINE_LOCATION w swoim manifeście:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Obejrzyj także ten film:
https://www.youtube.com/watch?v=F0Kh_RnSM0w
źródło
Ten działa dla mnie.
Jest prostsza niż odpowiedź Rj0078 w tym pytaniu ( https://stackoverflow.com/a/42556648/11211963 ), ale ta również zadziałała.
Pokazuje takie okno dialogowe:
(Napisane w Kotlinie)
źródło
Musisz tylko usunąć
LocationListener
fromLocationManager
źródło
Użyj tego kodu Prosty i łatwy dostęp:
Uprawnienia:
Postępuj zgodnie z tym kodem, aby uzyskać programowy dostęp do GPS:
źródło