Czy można włączyć Usługi lokalizacji za pośrednictwem Shell?

14

Czy można włączyć usługi lokalizacyjne (GPS lub Google NetworkLocation) przez ADB lub emulator terminala? Jestem na zrootowanym telefonie.

Dodatkowe punkty: Czy można również zmienić inne ustawienia związane z systemem?

minikookie
źródło
To pytanie zostało już zadane, patrz: Czy mogę zmienić niektóre ustawienia Androida z wiersza poleceń?
Izzy
2
@Izzy Nie sądzę, że jest to w pełni duplikat.
Mateusz
2
@ Izyzy nie spokrewnione. Pytanie, do którego się odnosisz, nie ma nic wspólnego z usługami lokalizacyjnymi.
lorddev,
1
@ Lordord Nie, nie są wyraźnie wymienione. Ale możesz użyć tego samego kodu, aby wywołać zamiar usług lokalizacyjnych. To, co mnie trochę dezorientuje, to sformułowanie mojego komentarza, które sugeruje „bezpośredni hit” (i tutaj oboje macie rację: to nie jest dokładnie to samo). Trudno powiedzieć, pół roku później, co miałem na myśli wtedy ...
Izzy

Odpowiedzi:

12

Czy można włączyć usługi lokalizacyjne (GPS lub Google NetworkLocation) przez ADB lub emulator terminala?

Polecenie to:

adb shell settings put secure location_providers_allowed gps

gdzie,

  • settingszmieniłby w settings.db(część com.android.providers.settings)
  • putjest aktualizacja klucza location_providers_allowedo wartość gpsw tabeli secure.

Powyższe polecenie nie włącza usługi lokalizacyjnej Google. Aby to również włączyć, wydaj polecenie:

adb shell settings put secure location_providers_allowed gps,network

Zostanie wyświetlone wyskakujące okienko z prośbą o wyrażenie zgody na usługi lokalizacji. W moim Androidzie 4.2.1 muszę wyrazić zgodę poprzez GUI lub za input keyeventkażdym razem, gdy włączam usługę od zera.

                                                                    IMG: 4.2.1

Jednak w moim Androidzie 5.0 mogę zapisać ustawienia w oknie dialogowym, a wykonanie polecenia sprawia, że ​​wszystko jest idealnie wykonane od następnego razu.

                                                                    IMG: 5.0

Niektóre urządzenia, takie jak Lollipop, mają trzy tryby Lokalizacji, a odpowiednie wartości, które należy przekazać w powyższym poleceniu, to:

  • Wysoka dokładność: gps,wifi,networklub gps,network(jeśli nie chcesz włączać Wi-Fi)
  • Oszczędzanie baterii: wifi,networklub networktylko
  • Tylko urządzenie: gps

Aby wyłączyć tryb lokalizacji

adb shell settings put secure location_providers_allowed ' '

Czy można również zmienić inne ustawienia związane z systemem?

Widzieć :

Ale już wpadłem na świetny pomysł settings put.

Firelord
źródło
Czy można to osiągnąć, ale z poziomu konsoli urządzenia, nie za pośrednictwem ADB komputera zewnętrznego?
davide
1
Tak, absolutnie. Potrzebny byłby jednak dostęp do roota lub bezprzewodowy ADB działający na urządzeniu. Spójrz na tę odpowiedź jako przykład. Wpadłbyś na pomysł.
Firelord
To kiedyś działało na Androidzie 5, ale już nie działa na Androidzie 6. Z rootem lub bez niego ustawienie nie zmienia się i pozostaje takie samo, jak skonfigurowane w systemie. Prawdopodobnie ma to związek z location_providers_allowedprzestarzałością ( developer.android.com/reference/android/provider/… ). Pomysły?
gw0,
Jeśli chcesz tylko włączyć / wyłączyć funkcję GPS, możesz przejść do strony Lokalizacja ustawień, a następnie kliknąć przycisk przełącznika. Operację tę można również wykonać za pomocą polecenia:, adb shell am start -a android.settings.LOCATION_SOURCE_SETTINGSa następnie kliknij przycisk przełącznika.
Eddy,
13

Dla Androida 6.0

Aby włączyć użycie:

Dla GPS: adb shell settings put secure location_providers_allowed +gps

Dla sieci: adb shell settings put secure location_providers_allowed +network

Wyłączyć :

GPS: adb shell settings put secure location_providers_allowed -gps

Dla sieci: adb shell settings put secure location_providers_allowed -network

Aditya S.
źródło
Dla mnie to zadziałało, a nie zaakceptowana odpowiedź.
TheMonkeyKing
Dzięki, działa. Czy jest tak czy inaczej, możemy włączyć / wyłączyć GPS i sieć za pomocą jednego polecenia linii adb. Potrzebuję go do locaton o wysokiej dokładności. sieć gps + = wysoka dokładność
Suban Dhyako,
4

Usługa lokalizacji systemu Android oferuje różne opcje:

1) Wysoka dokładność: gps, network

Włączyć: adb shell settings put secure location_providers_allowed +gps,network

Wyłączyć: adb shell settings put secure location_providers_allowed -gps,network

2) Tylko telefon: gps

Włączyć: adb shell settings put secure location_providers_allowed +gps

Wyłączyć: adb shell settings put secure location_providers_allowed -gps

3) Oszczędzanie baterii: network

Włączyć: adb shell settings put secure location_providers_allowed +network

Wyłączyć: adb shell settings put secure location_providers_allowed -network

Parth Naik
źródło
0

location_providers_allowed nie działa już w systemie Android 10 (poziom API 29).

Zamiast tego, można ustawić location_mode, aby LOCATION_MODE_HIGH_ACCURACYo wartości 3:

adb shell settings put secure location_mode 3

UWAGA: Prawdopodobnie nie będzie działać> 29, ponieważ jest to już nieaktualne, jak wspominają dokumenty w trybie lokalizacji:

Ta stała została uznana za przestarzałą na poziomie API 28. Preferowane metody sprawdzania trybu lokalizacji i nasłuchiwania zmian są za pomocą LocationManager#isLocationEnabled()i LocationManager#MODE_CHANGED_ACTION.

Nie wiem, jaki będzie programowy sposób wykonania tego przez powłokę, gdy ta stała zniknie.

anotherdave
źródło