web-dev-qa-db-fra.com

Comment émuler la position GPS dans l'émulateur Android?

Je souhaite obtenir la longitude et la latitude dans l'émulateur Android à des fins de test.

Quelqu'un peut-il me guider pour y parvenir?

Comment définir l'emplacement de l'émulateur sur une position de test?

422
UMAR

Vous pouvez vous connecter à l'émulateur via Telnet. Vous disposez alors d’une console Emulator qui vous permet de saisir certaines données telles que les correctifs géographiques, le réseau, etc.

Comment utiliser la console est expliqué en détail ici . Pour vous connecter à la console, ouvrez une ligne de commande et tapez

telnet localhost 5554

Vous pouvez ensuite utiliser la commande geo pour définir une latitude, une longitude et, le cas échéant, une altitude sur l'appareil qui est transmise à tous les programmes à l'aide du fournisseur de localisation GPS. Voir le lien ci-dessus pour plus d'instructions.

La commande spécifique à exécuter dans la console est

geo fix <longitude value> <latitude value>

J'ai trouvé ce site utile pour trouver un lat/lng réaliste: http://itouchmap.com/latlong.html

Si vous avez besoin de plus d’une coordonnée, vous pouvez utiliser un fichier kml avec une route. C’est un peu décrit dans ce article . Je ne peux pas trouver une meilleure source pour le moment.

431
Janusz

Je recherchais un meilleur moyen de définir les coordonnées GPS de l'émulateur que d'utiliser geo fix et de déterminer manuellement les coordonnées de latitude et de longitude spécifiques.

Incapable de trouver quoi que ce soit, j'ai mis au point un petit programme qui utilise GWT et l'API Google Maps pour lancer un outil cartographique basé sur un navigateur permettant de définir la position GPS dans l'émulateur:

Android-gps-emulator

J'espère que cela pourra être utile pour aider d'autres personnes qui tomberont sans doute aussi sur cette difficulté/question.

Android-gps-emulator

106
dpdearing

Si vous utilisez Eclipse, accédez à Window->Open Perspective->DDMS, puis entrez-en un dans Location Controls et appuyez sur Send.

80
SteveCav

Personne ici n’a mentionné la solution intégrée de l’émulateur lui-même. Par conséquent, pour les futurs visiteurs, j’aimerais la partager avec des éléments visuels.

Tout d’abord, lancez votre Android Emulator et cliquez sur le bouton de menu (3 points) ci-dessous:

emulator with menu button

Ensuite, dans le volet de gauche, sélectionnez Emplacement et modifiez les coordonnées en fonction de vos besoins. Après avoir appuyé sur le bouton Envoyer , les modifications prendront effet immédiatement (je vous recommande d'ouvrir Google Maps pour une meilleure compréhension).

enter image description here

Version Android Studio: 2.3.3

En outre, pour que vos différents emplacements arrivent dans votre application en temps réel, vous pouvez utiliser le fichier GPX. Il est très facile de créer ce fichier à partir du lien de direction de Google Map:

  1. Allez sur google map, choisissez un emplacement, puis appuyez sur "Itinéraire" et entrez le deuxième emplacement.
  2. Une fois l'itinéraire créé, copiez un lien depuis le navigateur.
  3. Allez sur ce site: https://mapstogpx.com et collez le lien vers la boîte "Allons-y"
  4. Appuyez sur le bouton "Let's Go" et le fichier GPX sera téléchargé

Utilisez le bouton "Charger GPS/KML" pour charger le fichier créé sur votre émulateur, choisissez la vitesse et appuyez sur le bouton de lecture vert en bas. Les emplacements seront envoyés en temps réel, comme indiqué sur l'image ci-dessous.

enter image description here

79
eden

Pour Android utilisateurs de Studio:

lancez l'émulateur,

Ensuite, allez à Tools -> Android ->Android device monitor

ouvrez l'onglet Emulator Control et utilisez le groupe de contrôles d'emplacement.

32
ofer

1. Android Utilisateurs de Studio.

Après avoir exécuté l'émulateur, allez à Outils-> Android-> Moniteur d'appareil Android

Cliquez sur l'onglet Emulator Control Control du groupe de contrôles d'emplacement.

2. Utilisateurs Eclipse.

First In Eclipse In Menu Sélectionnez "Window", puis "Open Perspective", puis "DDMS". c'est-à-dire Fenêtre-> Ouvrir une perspective-> DDMS.

Vous verrez sur le panneau de périphériques du côté gauche et sur le côté droit, vous verrez différents onglets. Sélectionnez l'onglet "Contrôle de l'émulateur".

En bas, vous verrez le panneau de contrôle d'emplacement. Sélectionnez l'onglet "Manuel".

Entrez la longitude et la latitude dans les zones de texte, puis cliquez sur le bouton Envoyer. Il enverra la position à votre émulateur et à l'application.

3. Utiliser telnet.

Dans la commande Exécuter, tapez ceci.

telnet localhost 5554

Si vous n'utilisez pas Windows, vous pouvez utiliser n'importe quel client telnet.

Après vous être connecté avec telnet, utilisez la commande suivante pour envoyer votre position à l’émulateur.

geo fix long lat    
geo fix -121.45356 46.51119 4392

4. Utiliser l'outil Google Maps basé sur le navigateur

Il existe un programme qui utilise GWT et l'API Google Maps pour lancer un outil cartographique basé sur un navigateur permettant de définir la position GPS dans l'émulateur:

Android-gps-emulator

Pour le nouvel émulateur:

http://developer.Android.com/tools/devices/emulator.html#extended

En gros, cliquez sur le bouton des trois points dans les commandes de l'émulateur (à droite de l'émulateur) pour ouvrir un menu qui vous permettra de contrôler l'émulateur, y compris l'emplacement.

13
f.khantsis

En supposant que vous ayez une vue cartographique configurée et opérationnelle:

MapView mapView = (MapView) findViewById(R.id.mapview);
final MyLocationOverlay myLocation = new MyLocationOverlay(this, mapView);

mapView.getOverlays().add(myLocation);
myLocation.enableMyLocation();

myLocation.runOnFirstFix(new Runnable() {
    public void run() {
        GeoPoint pt = myLocation.getMyLocation();
    }
});

Vous aurez besoin de la permission suivante dans votre manifeste:

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>

Et pour envoyer des maquettes à l'émulateur depuis Eclipse, allez dans le menu "Fenêtre", sélectionnez "Afficher la vue"> "Autre"> "Contrôle de l'émulateur". Vous pouvez également envoyer les coordonnées à partir du volet de contrôle de l'émulateur qui apparaît.

13
David Hedlund

Utilisation de la commande "geo" dans la console de l'émulateur

Pour envoyer des données de localisation fictives à partir de la ligne de commande:

  1. Lancez votre application dans l'émulateur Android et ouvrez un terminal/une console située dans le répertoire/tools de votre SDK.

  2. Connectez-vous à la console de l'émulateur:

    telnet localhost 5555 (Remplacez 5555 par le port de votre émulateur)

  3. Envoyez les données de localisation: * geo fix pour envoyer une géolocalisation fixe.

    Cette commande accepte une longitude et une latitude en degrés décimaux, ainsi qu'une altitude optionnelle en mètres. Par exemple:

    geo fix -121.45356 46.51119 4392
    
10
Dan Zhao

J'ai écrit un script python pour envoyer les emplacements GPS à l'émulateur via Telnet. Il définit une source et une destination. Il existe également un décalage temporel qui vous permet de contrôler la durée pendant laquelle les coordonnées seront transmises à l'appareil. Un endroit est poussé une fois par seconde.

Dans l'exemple ci-dessous, le script passe de Berlin à Hambourg en 120 secondes. Une étape/emplacement GPS par seconde avec des distances aléatoires.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random

Host = "127.0.0.1"
PORT = 5554
TIMEOUT = 10
LAT_SRC = 52.5243700
LNG_SRC = 13.4105300
LAT_DST = 53.5753200
LNG_DST = 10.0153400
SECONDS = 120

LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2

DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1

lat = LAT_SRC
lng = LNG_SRC

tn = telnetlib.Telnet(Host, PORT, TIMEOUT)
tn.set_debuglevel(9)
tn.read_until("OK", 5)

tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
#tn.write("exit\n")

for i in range(SECONDS):
    lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
    lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG

    #tn.read_until("OK", 5)
    tn.write("geo fix {0} {1}\n".format(lng, lat))
    #tn.write("exit\n")
    sleep(1)

tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
tn.write("exit\n")

print tn.read_all()
8
user937284

La solution suivante a fonctionné pour moi - ouvrez la ligne de commande et écrivez:

adb emu geo fix [longtitude] [latitude]
5
Asaf Pinhassi

Sous Mac, Linux ou Cygwin:

echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554

Cela vous mettra à Mexico. Changez votre longitude/latitude/altitude en conséquence. Cela devrait suffire si vous n'êtes pas intéressé par nmea.

5
Alberto Gaona

J'utilise la fonction DDMS plug Eclipse pour envoyer un GPS. enter image description here

5
boiledwater

Sous Linux, les ports de communication sont bloqués. naviguez le terminal vers le dossier platform-tools à l'intérieur de Android sdk et lancez cette commande:

./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
5
abhishek singh

Voir Obtention de l'emplacement de l'utilisateur

Regardez sous Fournir des données de localisation fictives . Vous trouverez la solution pour cela.

4
daemon54

Allez tout d’abord dans la section DDMS de votre contrôle Eclipse Than open emulator .... Allez à la section manuelle, définissez lat et long, puis appuyez sur le bouton Envoyer

4
sachin pareek

Dalvik Debug Monitor> Sélectionnez Émulateur> Onglet Contrôle d’émulateur> Contrôles d’emplacement.

DDMS - Android_sdk/tools/ddms OR Android_sdk/tools/monitor

3
Dan

J'essayais de régler le correctif géographique par le biais de l'adb pour de nombreux points et je ne pouvais pas obtenir de données GPS de mon application. Mais lorsque j'ai essayé d'ouvrir DDMS, de sélectionner le processus de mon application et d'envoyer les coordonnées via l'onglet de contrôle de l'émulateur, cela a immédiatement fonctionné.

3
James

Si vous utilisez Eclipse, vous pouvez définir manuellement la latitude et la longitude et exécuter votre application cartographique dans l'émulateur à l'aide du contrôleur d'émulateur.

2
Swapnil

Si vous utilisez Android Studio (1.3):

  • Cliquez sur le menu "Outils"
  • "Android"
  • "Moniteur de périphérique Android"
  • cliquez sur votre émulateur actuel
  • Onglet "Contrôle de l'émulateur"
  • allez dans "Contrôles de localisation" et entrez Lat et Lon
2
electrobabe

Faites de la réponse d'Alberto Gaona une seule ligne

token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n  geo fix 96.0290791 16.9041016  \n exit") - | nc localhost 5554

5554 est le numéro du port de l'émulateur indiqué dans adb devices.

Il aurait été préférable que adb emu fonctionne.

2
Kyaw Tun

J'étais incapable d'obtenir un correctif GPS sur l'émulateur lorsque celui-ci était exécuté sous Android image sans les API Google. Dès que j'ai modifié l'image pour qu'elle contienne les API Google, toutes les méthodes mentionnées ci-dessous pour obtenir un repère GPS ont fonctionné.

Assurez-vous de sélectionner une image avec les API Google lors de la création d'AVD.

1
dvim

Pour mon propre projet, j'ai développé un service en ligne qui peut fournir une localisation simulée à l'émulateur Android.

Il utilise geo nmea plutôt que geo fix, ce qui lui permet de régler la vitesse, le cap, le temps précis, etc. en plus du lat/lon.

Le service nécessite l’utilitaire de ligne de commande nc (netcat) et rien d’autre.

http://www.kisstech.ch/nmea/

1
Gerhard Wesp

La réponse multiple déjà mentionnée à utiliser la commande Shell "géo correctif ..." est la réponse correcte. Mais si vous utilisez LocationClient.getLastLocation () pour récupérer vos données, il convient de mentionner que cela ne fonctionnera pas au début. La classe LocationClient utilise le service Google Play pour récupérer les coordonnées. Pour moi, cela a commencé à fonctionner après l'exécution de l'application d'émulateurs de cartes une fois. Lors du premier démarrage, vous êtes invité à autoriser Google Apps à accéder à votre emplacement, ce qui, je suppose, fait l'affaire.

1
Maik

Il existe un plug-in pour Android Studio appelé “Mock Location Plugin”. Vous pouvez émuler plusieurs points avec ce plugin. Vous pouvez trouver un manuel d'utilisation détaillé dans ce lien: Android Studio. Simuler plusieurs points GPS avec Mock Location Plugin

1
Jesús Amieiro

Vous pouvez utiliser un émulateur tel que genymotion qui vous donne la possibilité d'émuler votre position GPS actuelle, etc.

1
Neil B

Ouvrez Android studio-> menu Outils-> Android-> Android Moniteur de périphériques-> Onglet Emulateur-> Contrôle de la position-> Définissez la latitude et la longitude requises et vérifiez votre projet selon vos avoir besoin

1

Si les solutions ci-dessus ne fonctionnent pas. Essaye ça:

Dans votre Android Manifest.xml, ajoutez les deux liens suivants EXTÉRIEUR de la balise d'application, mais à l'intérieur de votre balise manifeste bien sûr.

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission Android:name="Android.permission.INTERNET" ></uses-permission>
1
ssgao

Vous ne pouvez pas encore commenter, aussi la mise à jour de @ectomorphs répond ici, ce qui nécessite un jeton d'authentification lorsque le telnet est maintenant. Sous Linux c'est sous /home/username/.emulator_console_auth_token

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random

FILE = open('/home/username/.emulator_console_auth_token', 'r')
AUTH_TOKEN = FILE.read()
FILE.close()

Host = "127.0.0.1"
PORT = 5554
TIMEOUT = 10
LAT_SRC = 52.5243700
LNG_SRC = 13.4105300
LAT_DST = 53.5753200
LNG_DST = 10.0153400
SECONDS = 120

LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2

DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1

lat = LAT_SRC
lng = LNG_SRC

tn = telnetlib.Telnet(Host, PORT, TIMEOUT)
tn.set_debuglevel(9)
tn.read_until("OK", 5)

tn.write("auth {0}\n".format(AUTH_TOKEN))
tn.read_until("OK", 5)

tn.read_until("OK", 5)

tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
#tn.write("exit\n")

for i in range(SECONDS):
    lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
    lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG

    #tn.read_until("OK", 5)
    tn.write("geo fix {0} {1}\n".format(lng, lat))
    #tn.write("exit\n")
    sleep(1)

tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
tn.write("exit\n")

print tn.read_all()

A partir d'un script shell, on peut définir la coorination de la sorte

#!/usr/bin/env bash
export ATOKEN=`cat ~/.emulator_console_auth_token`
echo -ne "auth $ATOKEN\ngeo fix -99.133333 19.43333 2202\n"  | nc localhost 5554
0
draekko

Dans Eclipse:

Vous devrez peut-être faire glisser la fenêtre DDMS vers le bas. "Contrôles d'emplacement" se trouve sous "Actions de téléphonie" et peut être masqué par une vue de console de taille normale (la barre avec console, LogCat, etc. peut le couvrir!)

~

0
Droid Teahouse

J'ai fait un petit script similaire à l'une des réponses précédentes, mais en utilisant expect à la place de python - car c'est un peu plus simple (expect a été inventé pour cela).

#!/usr/bin/expect

set port [lindex $argv 0]
set lon [lindex $argv 1]
set lat [lindex $argv 2]

set timeout 1
spawn telnet localhost $port
expect_after eof { exit 0 }

## interact
expect OK

set fp [open "~/.emulator_console_auth_token" r]
if {[gets $fp line] != -1} {
  send "auth $line\r"
}

send "geo fix $lon $lat\r"
expect OK
send "exit\r"

Exemple d'utilisation: sendloc 5554 2.35607 48.8263

0
BoD