È possibile abilitare i servizi di localizzazione tramite Shell?


14

È possibile abilitare i servizi di localizzazione (GPS o Google NetworkLocation) tramite ADB o Terminal Emulator? Sono su un telefono rootato.

Punti extra: è anche possibile modificare altre impostazioni relative al sistema?



2
@Izzy Non penso che sia completamente un duplicato.
Matthew Leggi il

2
@Izzy non correlato. La domanda a cui ti sei collegato non ha nulla a che fare con i servizi di localizzazione.
lorddev, l'

1
@lorddev No, non sono esplicitamente menzionati. Ma puoi usare lo stesso codice per chiamare l'intento per i servizi di localizzazione. Ciò che mi confonde un po 'è il fraseggio del mio commento, che suggerisce un "colpo diretto" (e qui entrambi avete ragione: non è esattamente lo stesso). Difficile dirlo, sei mesi dopo, quello che avevo in mente allora ...
Izzy

Risposte:


12

È possibile abilitare i servizi di localizzazione (GPS o Google NetworkLocation) tramite ADB o Terminal Emulator?

Il comando è:

adb shell settings put secure location_providers_allowed gps

dove,

  • settingsrenderebbe le modifiche in settings.db(parte di com.android.providers.settings)
  • putè aggiornare la chiave location_providers_allowedcon valore gpsnella tabella secure.

Il suddetto comando non abiliterebbe il servizio di localizzazione di Google. Per abilitarlo anche, emetti il ​​comando:

adb shell settings put secure location_providers_allowed gps,network

Ti verrà mostrato un popup per accettare i servizi di localizzazione. Nel mio Android 4.2.1, devo accettare la GUI o input keyeventogni volta che abilito il servizio da zero.

                                                                    IMG: 4.2.1

Tuttavia, nel mio Android 5.0 posso salvare le impostazioni nella finestra di dialogo e l'esecuzione del comando rende le cose perfettamente fatte dalla prossima volta.

                                                                    IMG: 5.0

Alcuni dispositivi come quelli di Lollipop hanno tre modalità di localizzazione e i valori rilevanti da passare nel suddetto comando sarebbero:

  • Alta precisione: gps,wifi,networkoppure gps,network(se non si desidera abilitare il Wi-Fi)
  • Risparmio batteria: wifi,networko networksolo
  • Solo dispositivo: gps

Per disabilitare la modalità Posizione

adb shell settings put secure location_providers_allowed ' '

È anche possibile modificare altre impostazioni relative al sistema?

Vedi:

Ma ho già dato una grande idea usando settings put.


Sarebbe possibile ottenere lo stesso, ma dalla console del dispositivo, non tramite l'ADB di un computer esterno?
davide

1
Si assolutamente. Avresti bisogno di accesso root o wireless ADB in esecuzione sul dispositivo. Dai un'occhiata a questa risposta come esempio. Avresti un'idea.
Firelord

Funzionava su Android 5, ma non funziona più su Android 6. Con o senza root l'impostazione non cambia e rimane la stessa configurata sul sistema. Probabilmente ha a che fare con l' location_providers_allowedessere deprecato ( developer.android.com/reference/android/provider/… ). Idee?
gw0

Se vuoi solo attivare / disattivare la funzionalità GPS, puoi andare alla pagina Posizione impostazioni, quindi fare clic sul pulsante di commutazione. Questa operazione può essere eseguita anche con il comando:, adb shell am start -a android.settings.LOCATION_SOURCE_SETTINGSquindi fare clic sul pulsante di commutazione.
Eddy,

13

Per Android 6.0

Per abilitare l'uso:

Per GPS: adb shell settings put secure location_providers_allowed +gps

Per rete: adb shell settings put secure location_providers_allowed +network

Disabilitare :

GPS : adb shell settings put secure location_providers_allowed -gps

Per rete: adb shell settings put secure location_providers_allowed -network


Questo ha funzionato per me, non per la risposta accettata.
TheMonkeyKing,

Grazie, funziona C'è comunque che possiamo abilitare / disabilitare gps e network con un comando adb a una riga. Ne ho bisogno per una localizzazione ad alta precisione. gps + network = alta precisione
Suban Dhyako,

4

Il servizio di localizzazione Android include diverse opzioni:

1) Alta precisione: gps, network

Abilitare: adb shell settings put secure location_providers_allowed +gps,network

Disattivare: adb shell settings put secure location_providers_allowed -gps,network

2) Solo telefono: gps

Abilitare: adb shell settings put secure location_providers_allowed +gps

Disattivare: adb shell settings put secure location_providers_allowed -gps

3) Risparmio batteria: network

Abilitare: adb shell settings put secure location_providers_allowed +network

Disattivare: adb shell settings put secure location_providers_allowed -network


0

location_providers_allowed non funziona più per Android 10 (livello API 29).

Invece, puoi impostare location_modea LOCATION_MODE_HIGH_ACCURACYcon un valore di 3:

adb shell settings put secure location_mode 3

NOTA: Probabilmente non funzionerà> v29 poiché questo è già obsoleto come menzionano i documenti sulla modalità di localizzazione:

Questa costante è stata deprecata nel livello API 28. I metodi preferiti per controllare la modalità di localizzazione e ascoltare le modifiche sono tramite LocationManager#isLocationEnabled()e LocationManager#MODE_CHANGED_ACTION.

Non so quale sarà un modo programmatico di farlo attraverso la shell una volta che questa costante scompare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.