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?
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.
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:
J'espère que cela pourra être utile pour aider d'autres personnes qui tomberont sans doute aussi sur cette difficulté/question.
Si vous utilisez Eclipse
, accédez à Window->Open Perspective->DDMS
, puis entrez-en un dans Location Controls
et appuyez sur Send
.
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:
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).
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:
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.
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.
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:
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.
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.
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:
Lancez votre application dans l'émulateur Android et ouvrez un terminal/une console située dans le répertoire/tools de votre SDK.
Connectez-vous à la console de l'émulateur:
telnet localhost 5555
(Remplacez 5555 par le port de votre émulateur)
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
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()
La solution suivante a fonctionné pour moi - ouvrez la ligne de commande et écrivez:
adb emu geo fix [longtitude] [latitude]
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.
J'utilise la fonction DDMS plug Eclipse pour envoyer un GPS.
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}
Voir Obtention de l'emplacement de l'utilisateur
Regardez sous Fournir des données de localisation fictives . Vous trouverez la solution pour cela.
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
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
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é.
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.
Si vous utilisez Android Studio (1.3):
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.
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.
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.
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.
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
Vous pouvez utiliser un émulateur tel que genymotion qui vous donne la possibilité d'émuler votre position GPS actuelle, etc.
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>
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
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!)
~
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