¿Es posible habilitar los servicios de ubicación a través de Shell?

14

¿Es posible habilitar los Servicios de ubicación (GPS o Google NetworkLocation) a través de ADB o Terminal Emulator? Estoy en un teléfono rooteado.

Puntos extra: ¿También es posible cambiar otras configuraciones relacionadas con el sistema?

minicookie
fuente
2
@ Izzy No creo que sea un duplicado completo.
Matthew leyó
2
@Izzy no está relacionado. La pregunta a la que se vinculó no tiene nada que ver con los servicios de ubicación.
lorddev
1
@lorddev No, no se mencionan explícitamente. Pero puede usar el mismo código para llamar a la intención de los servicios de ubicación. Lo que me confunde un poco es la redacción de mi comentario, que sugiere un "golpe directo" (y aquí ambos tienen razón: no es exactamente lo mismo). Difícil de decir, medio año después, lo que tenía en mente en aquel entonces ...
Izzy

Respuestas:

12

¿Es posible habilitar los servicios de ubicación (GPS o Google NetworkLocation) a través de ADB o Terminal Emulator?

El comando es:

adb shell settings put secure location_providers_allowed gps

dónde,

  • settingsharía cambios en settings.db(parte de com.android.providers.settings)
  • putes actualizar la clave location_providers_allowedcon el valor gpsen la tabla secure.

El comando mencionado no habilitaría el Servicio de ubicación de Google. Para habilitarlo también, emita el comando:

adb shell settings put secure location_providers_allowed gps,network

Se le mostrará una ventana emergente para aceptar los Servicios de ubicación. En mi Android 4.2.1, tengo que aceptar a través de la GUI o input keyeventcada vez que habilito el servicio desde cero.

                                                                    IMG: 4.2.1

Sin embargo, en mi Android 5.0 puedo guardar la configuración en el cuadro de diálogo y la ejecución del comando hace las cosas perfectamente desde la próxima vez.

                                                                    IMG: 5.0

Algunos dispositivos como los de Lollipop tienen tres modos de ubicación, y los valores relevantes que se pasarán en el comando mencionado serían:

  • Alta precisión: gps,wifi,networko gps,network(si no desea habilitar Wi-Fi)
  • Ahorro de batería: wifi,networko networksolo
  • Solo dispositivo: gps

Para deshabilitar el modo de ubicación

adb shell settings put secure location_providers_allowed ' '

¿También es posible cambiar otras configuraciones relacionadas con el sistema?

Ver :

Pero ya di una gran idea usando settings put.

Señor del fuego
fuente
¿Sería posible lograr lo mismo, pero desde la consola del dispositivo, no a través del ADB de una computadora externa?
davide
1
Si, absolutamente. Sin embargo, necesitaría acceso root o ADB inalámbrico ejecutándose en el dispositivo. Eche un vistazo a esta respuesta como ejemplo. Tendrías una idea.
Señor del fuego
Esto solía funcionar en Android 5, pero ya no funciona en Android 6. Con o sin root, la configuración no cambia y permanece igual a la configurada en el sistema. Probablemente tenga algo que ver con location_providers_allowedser desaprobado ( developer.android.com/reference/android/provider/… ). Ideas?
gw0
Si solo desea activar / desactivar la funcionalidad GPS, puede ir a la página de Ubicación de la configuración y luego hacer clic en el botón de cambio. Esta operación también se puede lograr mediante el comando:, adb shell am start -a android.settings.LOCATION_SOURCE_SETTINGSluego haga clic en el botón de cambio.
Eddy
13

Para Android 6.0

Para habilitar el uso:

Para GPS: adb shell settings put secure location_providers_allowed +gps

Para la red: adb shell settings put secure location_providers_allowed +network

Deshabilitar :

GPS : adb shell settings put secure location_providers_allowed -gps

Para la red: adb shell settings put secure location_providers_allowed -network

Aditya S
fuente
Esto funcionó para mí, no la respuesta aceptada.
TheMonkeyKing
Gracias funciona. ¿Hay alguna forma de habilitar / deshabilitar gps y red con el comando adb de una línea? Lo necesito para una ubicación de alta precisión. gps + network = alta precisión
Suban Dhyako
4

El servicio de ubicación de Android viene con diferentes opciones:

1) Alta precisión: gps, network

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

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

2) Solo teléfono: gps

Habilitar: adb shell settings put secure location_providers_allowed +gps

Inhabilitar: adb shell settings put secure location_providers_allowed -gps

3) Ahorro de batería: network

Habilitar: adb shell settings put secure location_providers_allowed +network

Inhabilitar: adb shell settings put secure location_providers_allowed -network

Parth Naik
fuente
0

location_providers_allowed ya no funciona para Android 10 (nivel de API 29).

En su lugar, puede establecer location_modea LOCATION_MODE_HIGH_ACCURACYcon un valor de 3:

adb shell settings put secure location_mode 3

NOTA: Probablemente no funcionará> v29 ya que esto ya está en desuso, ya que los documentos en el modo de ubicación mencionan:

Esta constante fue desaprobada en el nivel 28 de API. Los métodos preferidos para verificar el modo de ubicación y escuchar los cambios son a través de LocationManager#isLocationEnabled()y LocationManager#MODE_CHANGED_ACTION.

No sé cuál será una forma programática de hacer esto a través del shell una vez que esta constante desaparezca.

otro
fuente