Comment émuler la localisation GPS dans L'émulateur Android?

je veux obtenir la longitude et la latitude dans L'émulateur Android pour les tests.

quelqu'un Peut-il me guider comment faire?

comment régler l'emplacement de l'émulateur en position d'essai?

397
demandé sur jdev 2010-02-17 12:55:51

30 réponses

vous pouvez vous connecter à L'émulateur via Telnet. Vous disposez alors d'une console D'émulateur qui vous permet d'entrer certaines données comme les géo-correctifs, le réseau, etc.

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

telnet localhost 5554

vous pouvez alors utiliser la commande geo pour définir une latitude, longitude et si nécessaire l'altitude sur le dispositif qui est passé à tous les programmes en utilisant le 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 cet article . Je ne peux pas trouver un meilleure source pour le moment.

418
répondu Janusz 2017-10-12 02:57:07

je cherchais une meilleure façon de régler les coordonnées GPS de l'émulateur qu'en utilisant geo fix et en déterminant manuellement la latitude et la longitude spécifiques.

incapable de trouver quoi que ce soit, j'ai mis en place un petit programme qui utilise GWT et L'API GoogleMaps pour lancer un outil de cartographie basé sur un navigateur pour définir la localisation GPS dans l'émulateur:

android-gps-émulateur

espérons qu'il peut être utile pour aider les autres qui tomberont sans doute à travers cette difficulté / question aussi bien.

android-gps-emulator

104
répondu dpdearing 2017-02-08 14:30:33

si vous utilisez Eclipse , passez à Window->Open Perspective->DDMS , puis tapez un dans Location Controls et appuyez sur Send .

80
répondu SteveCav 2013-10-29 08:36:45

personne ici n'a mentionné la solution intégrée de l'émulateur lui-même, donc pour les futurs visiteurs, Je voudrais le partager avec des visuels.

tout d'abord, lancez votre émulateur Android et cliquez sur le bouton menu (3 points) ci-dessous:

emulator with menu button

ensuite, à partir du volet de gauche, sélectionnez Location et changez les coordonnées en fonction de vos besoins. Après avoir appuyé sur envoyer Bouton, les changements 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

33
répondu eden 2017-07-14 09:00:38

pour les utilisateurs de Android Studio:

exécuter l'émulateur,

ensuite, passez à Tools -> Android ->Android device monitor

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

32
répondu ofer 2016-09-19 11:11:13

en supposant que vous avez un mapview configuré et lancé:

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 coordonnées simulées à L'émulateur à partir D'Eclipse, allez dans le menu" fenêtre", sélectionnez" Afficher " > "autre" > "contrôle de l'émulateur", et vous pouvez envoyer des coordonnées à partir du panneau de contrôle de l'émulateur qui apparaît.

13
répondu David Hedlund 2010-02-17 10:22:24

pour le nouvel émulateur:

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

Fondamentalement, cliquez sur les trois points de bouton dans l'émulateur contrôles (à droite de l'émulateur), et il va ouvrir un menu qui vous permettra de contrôler l'émulateur, y compris l'emplacement

12
répondu f.khantsis 2016-05-02 10:30:14

1. Utilisateurs d'Android Studio.

après l'exécution de L'émulateur outils goto - > Android->Android device monitor

cliquez sur l'onglet changement de contrôle de L'émulateur à partir du groupe de contrôle de l'emplacement.

2. Utilisateurs d'Eclipse.

D'abord dans Eclipse dans le Menu Sélectionner" Fenêtre "puis sélectionner" Ouvrir La Perspective "puis sélectionner"DDMS". I. e Window - > Open Prespective - > DDMS.

vous verrez sur le Panneau de dispositifs 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 de L'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 à vous émulateur et l'application.

3. À l'aide de telnet.

In 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 la connexion avec telnet utilisez la commande suivante pour envoyer votre position à l'émulateur.

geo fix long lat    
geo fix -121.45356 46.51119 4392

4. Utilisez L'outil GoogleMaps basé sur le navigateur

il y a un programme qui utilise GWT et L'API GoogleMaps pour lancer un outil cartographique basé sur un navigateur pour définir la localisation GPS dans l'émulateur:

android-gps-émulateur

12
répondu Muhammad Yousaf Sulahria 2016-10-16 19:45:25

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

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

  1. lancez votre application dans L'émulateur Android et ouvrez un terminal/console dans votre répertoire SDK /tools.

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

    telnet localhost 5555 (remplacer 5555 par n'importe quel port sur lequel votre émulateur tourne))

  3. envoyer les données de localisation: * géo-correction pour envoyer une géo-localisation fixe.

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

    geo fix -121.45356 46.51119 4392
    
10
répondu Dan Zhao 2016-07-20 20:55:57

j'ai écrit un script python pour pousser les localisations gps à l'émulateur via telnet. Il définit une source et un lieu de destination. Il y a aussi un décalage horaire qui vous permet de contrôler la longueur des coordonnées qui seront poussées vers l'appareil. Un endroit est poussé une fois par seconde.

dans l'exemple ci-dessous, le script se déplace de Berlin à Hambourg en 120 secondes. Une étape / localisation 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
répondu user937284 2015-08-20 21:34:45

j'utilise la fonction DDMS d'eclipse plug pour envoyer GPS. enter image description here

5
répondu boiledwater 2013-06-17 09:39:29

dans Linux où les ports de communication sont bloqués. dirigez le terminal vers le dossier plate-forme-Outils à l'intérieur de android sdk et lancez cette commande:

./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
5
répondu abhishek singh 2013-12-17 08:26:13

dans Mac, Linux ou Cygwin:

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

qui vous placera à Mexico. Changez votre longitude / latitude / altitude en conséquence. Cela devrait être suffisant si vous n'êtes pas intéressé dans nmea.

5
répondu Alberto Gaona 2015-06-03 20:57:49
4
répondu daemon54 2012-03-21 01:32:22

premier go dans la section DDMS de votre éclipse Que le contrôle de l'émulateur ouvert .... Aller À La Section Manuel réglez lat et long, puis appuyez sur le bouton Envoyer

4
répondu sachin pareek 2012-12-13 07:00:45

la solution suivante a fonctionné pour moi - ouvrir la ligne de commande et écrire:

adb emu geo fix [longtitude] [latitude]
4
répondu Asaf Pinhassi 2016-10-26 05:20:05

j'essayais de régler le géo-correctif par adb pour de nombreux points et je n'ai pas pu obtenir mon application pour voir des données GPS. Mais quand j'ai essayé D'ouvrir DDMS, en sélectionnant le processus de mon application et en envoyant des coordonnées par l'intermédiaire de l'onglet de contrôle de l'émulateur, cela a fonctionné tout de suite.

3
répondu James 2010-08-08 12:38:10

Dalvik Debug Monitor > Sélectionnez Émulateur > Émulateur Contrôle Onglet > Emplacement Des Commandes.

DDMS -- android_sdk/outils/ddms OU android_sdk/outils/moniteur

3
répondu Dan 2012-12-11 18:13:43

si vous utilisez eclipse puis en utilisant Émulator controller vous pouvez définir la latitude et la longitude manuellement et exécuter votre application basée sur la carte dans émulateur

2
répondu Swapnil 2014-01-27 16:44:27

si vous utilisez Android Studio (1.3):

  • cliquez sur le Menu "Outils"
  • "Android"
  • "Android device monitor"
  • cliquez sur votre émulateur actuel
  • Onglet "Émulateur" Contrôle
  • passer à "Contrôles D'emplacement" et entrer Lat et Lon
2
répondu electrobabe 2015-08-06 12:47:54

faites simplement la réponse D'Alberto Gaona en 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 de port de l'émulateur indiqué dans adb devices .

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

2
répondu Kyaw Tun 2017-01-26 04:06:22

si les solutions ci-dessus ne fonctionnent pas. Essayez ceci:

dans votre manifeste androïde.xml, ajouter les deux liens suivants à L'extérieur de de l'étiquette de la demande, mais à l'intérieur de votre étiquette de 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
répondu ssgao 2012-10-08 04:03:05

j'ai été incapable d'obtenir un GPS sur l'émulateur quand l'émulateur exécutait L'Image Android sans Google APIs. Dès que j'ai changé l'image pour contenir Google APIs tous les moyens mentionnés ici pour obtenir un GPS corriger travaillé.

assurez-vous de sélectionner une image avec Google APIs lors de la création de AVD.

1
répondu dvim 2012-10-17 05:10:37

pour mon propre projet, j'ai développé un service en ligne qui peut fournir un emplacement simulé à L'émulateur Android.

il utilise geo nmea plutôt que Geo fix qui lui permet de régler la vitesse, Le Cap, l'heure précise, etc. en plus de juste lat / lon.

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

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

1
répondu Gerhard Wesp 2015-03-01 23:08:38

vous pouvez utiliser un émulateur comme genymotion qui vous donne la flexibilité d'émuler votre position GPS actuelle, etc.

1
répondu Neil B 2016-06-06 14:56:14

il y a un plugin pour Android Studio appelé"Mock Location Plugin". Vous pouvez émuler plusieurs points avec ce plugin. Vous pouvez trouver un manuel d'utilisation détaillé sur ce lien: Android Studio. Simuler plusieurs points GPS avec le Plugin de localisation simulée

1
répondu Jesús Amieiro 2016-07-18 07:28:42

Open Android studio - > menu Outils->Android - > Moniteur D'appareil Android- > onglet émulateur - > contrôle D'emplacement - > Réglez votre latitude et longitude requises et vérifiez votre projet selon votre besoin

1
répondu Premkumar Manipillai 2017-11-07 10:33:50

Le déjà mentionné plusieurs fois une réponse à utiliser la commande shell " geo fix... " est la bonne réponse. Mais dans le cas où vous utilisez LocationClient.getLastLocation () pour récupérer vos données, il est important 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 avoir lancé l'application emulators maps une fois. Lors du premier départ, il vous est demandé de permettez à googleapps d'accéder à votre emplacement, ce qui, je suppose, fait l'affaire.

0
répondu Maik 2013-10-24 07:25:21

Dans eclipse:

vous devrez peut-être faire glisser la fenêtre du SGDD vers le bas. Les "contrôles de localisation" sont situés sous les "actions de téléphonie" et peuvent être masqués par une vue de console de taille normale ( la barre avec console, LogCat etc peut le couvrir!)

~

0
répondu Droid Teahouse 2015-01-06 08:35:18

ne peut pas encore commenter, donc la mise à jour de @ectomorphs répond ici, ce qui quand telneting nécessite maintenant d'avoir un jeton auth. Sous linux que 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()

à partir d'un script shell on peut définir le coorinate comme

#!/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
répondu draekko 2016-10-11 14:06:50