Est-il possible d'activer les services de localisation via Shell?

14

Est-il possible d'activer les services de localisation (GPS ou Google NetworkLocation) via ADB ou Terminal Emulator? Je suis sur un téléphone rooté.

Points supplémentaires: Est-il également possible de modifier d'autres paramètres liés au système?

minicookie
la source
2
@Izzy Je ne pense pas que ce soit un doublon.
Matthew Read
2
@Izzy non lié. La question à laquelle vous avez lié n'a rien à voir avec les services de localisation.
lorddev
1
@lorddev Non, ils ne sont pas explicitement mentionnés. Mais vous pouvez utiliser le même code pour appeler l'intention des services de localisation. Ce qui m'embrouille un peu, c'est la formulation de mon commentaire, qui suggère un "coup direct" (et ici vous avez tous les deux raison: ce n'est pas exactement pareil). Difficile de dire, six mois plus tard, ce à quoi je pensais à l'époque ...
Izzy

Réponses:

12

Est-il possible d'activer les services de localisation (GPS ou Google NetworkLocation) via ADB ou Terminal Emulator?

La commande est:

adb shell settings put secure location_providers_allowed gps

où,

  • settingsapporterait des changements dans settings.db(une partie de com.android.providers.settings)
  • putconsiste à mettre à jour la clé location_providers_allowedavec la valeur gpsdans le tableau secure.

La commande susmentionnée n'activerait pas le service de localisation de Google. Pour l'activer également, lancez la commande:

adb shell settings put secure location_providers_allowed gps,network

Une fenêtre contextuelle vous conviendrait pour les services de localisation. Dans mon Android 4.2.1, je dois accepter via l'interface graphique ou input keyeventchaque fois que j'active le service à partir de zéro.

                                                                    IMG: 4.2.1

Cependant, dans mon Android 5.0, je peux enregistrer les paramètres dans la boîte de dialogue et l'exécution de la commande rend les choses parfaitement faites la prochaine fois.

                                                                    IMG: 5.0

Certains appareils comme ceux de Lollipop ont trois modes Emplacements, et les valeurs pertinentes à passer dans la commande susmentionnée seraient:

  • Haute précision: gps,wifi,networkou gps,network(si vous ne voulez pas que le Wi-Fi soit activé)
  • Économie de batterie: wifi,networkou networkseulement
  • Appareil uniquement: gps

Pour désactiver le mode de localisation

adb shell settings put secure location_providers_allowed ' '

Est-il également possible de modifier d'autres paramètres liés au système?

Voir:

Mais j'ai déjà donné une grande idée en utilisant settings put.

Seigneur du feu
la source
Serait-il possible d'obtenir le même résultat, mais à partir de la console de l'appareil, non via la BAD d'un ordinateur externe?
davide
1
Oui absolument. Vous auriez besoin d'un accès root ou ADB sans fil en cours d'exécution sur l'appareil. Jetez un œil à cette réponse à titre d'exemple. Vous auriez une idée.
Firelord
Cela fonctionnait auparavant sur Android 5, mais ce n'est plus le cas sur Android 6. Avec ou sans root, le paramètre ne change pas et reste le même que celui configuré sur le système. Cela a probablement quelque chose à voir avec la location_providers_alloweddépréciation ( developer.android.com/reference/android/provider/… ). Des idées?
gw0
Si vous souhaitez simplement activer / désactiver la fonctionnalité GPS, vous pouvez accéder à la page Emplacement des paramètres, puis cliquer sur le bouton de commutation. Cette opération peut également être réalisée par la commande:, adb shell am start -a android.settings.LOCATION_SOURCE_SETTINGSpuis cliquez sur le bouton de commutation.
Eddy
13

Pour Android 6.0

Pour activer l'utilisation:

Pour le GPS: adb shell settings put secure location_providers_allowed +gps

Pour le réseau: adb shell settings put secure location_providers_allowed +network

Pour désactiver:

GPS : adb shell settings put secure location_providers_allowed -gps

Pour le réseau: adb shell settings put secure location_providers_allowed -network

Aditya S
la source
Cela a fonctionné pour moi, pas la réponse acceptée.
TheMonkeyKing
Merci, ça marche. Existe-t-il de toute façon que nous pouvons activer / désactiver le gps et le réseau avec une seule ligne de commande adb. J'en ai besoin pour une localisation de haute précision. gps + network = haute précision
Suban Dhyako
4

Le service de localisation Android propose différentes options:

1) Haute précision: gps, network

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

Désactiver: adb shell settings put secure location_providers_allowed -gps,network

2) Téléphone uniquement: gps

Activer: adb shell settings put secure location_providers_allowed +gps

Désactiver: adb shell settings put secure location_providers_allowed -gps

3) Économie de batterie: network

Activer: adb shell settings put secure location_providers_allowed +network

Désactiver: adb shell settings put secure location_providers_allowed -network

Parth Naik
la source
0

location_providers_allowed ne fonctionne plus pour Android 10 (API niveau 29).

, Vous pouvez régler la place location_modeà LOCATION_MODE_HIGH_ACCURACYune valeur de 3:

adb shell settings put secure location_mode 3

REMARQUE: ne fonctionnera probablement pas> v29 car cela est déjà déconseillé comme le mentionnent les documents sur le mode de localisation:

Cette constante est déconseillée au niveau de l'API 28. Les méthodes préférées pour vérifier le mode de localisation et écouter les modifications sont via LocationManager#isLocationEnabled()et LocationManager#MODE_CHANGED_ACTION.

Je ne sais pas quelle sera la manière programmatique de le faire via le shell une fois que cette constante aura disparu.

anotherdave
la source