Je veux obtenir la longitude et la latitude dans l'émulateur Android pour les tests.
Quelqu'un peut-il me guider pour y parvenir?
Comment définir l'emplacement de l'émulateur sur une position de test?
Je veux obtenir la longitude et la latitude dans l'émulateur Android pour les tests.
Quelqu'un peut-il me guider pour y parvenir?
Comment définir l'emplacement de l'émulateur sur une position de test?
Réponses:
Vous pouvez vous connecter à l'émulateur via Telnet. Vous avez ensuite une console d'émulateur qui vous permet d'entrer certaines données comme 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, si nécessaire, 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 également utiliser un fichier kml avec un itinéraire, c'est un peu décrit dans cet article . Je ne peux pas trouver de meilleure source pour le moment.
geo fix
commande n'est disponible que si vous en auth
premier.
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, exécutez votre émulateur Android et cliquez sur le bouton de menu (3 points) illustré ci-dessous:
Ensuite, dans le volet 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 immédiatement effet (je vous recommande d'ouvrir Google Maps pour une meilleure compréhension).
Version Android Studio: 2.3.3
De plus, 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.
Je cherchais 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.
Impossible de trouver quoi que ce soit, j'ai mis en place un petit programme qui utilise GWT et l'API Google Maps pour lancer un outil de carte basé sur un navigateur pour définir l'emplacement GPS dans l'émulateur:
J'espère que cela peut être utile pour aider d'autres personnes qui tomberont sans aucun doute sur cette difficulté / question.
ConnectionRefused
message si je lance l'émulateur GPS avant de démarrer l'appareil virtuel Android. En haut de mon navigateur, il indique également "Erreur lors de la connexion sur le port 5554 ..." Tout fonctionne bien si je clique sur le bouton "Changer le port de l'émulateur" pour se reconnecter
geo fix 42,42 42,42 42
virgules au lieu de points.
Si vous utilisez Eclipse
, accédez à Window->Open Perspective->DDMS
, puis saisissez-en un Location Controls
et appuyez sur Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Une idée pourquoi ça ne marche pas? J'utilise le Nexus 4 AVD par défaut
Pour les utilisateurs d'Android Studio:
exécutez l'émulateur,
Ensuite aller à Tools -> Android ->Android device monitor
ouvrez l' Emulator Control
onglet et utilisez le groupe de contrôles d'emplacement.
En supposant que vous avez configuré et exécuté une vue de carte:
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 l'autorisation suivante dans votre manifeste:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Et pour envoyer des coordonnées simulées à l'émulateur depuis Eclipse, allez dans le menu "Fenêtre", sélectionnez "Afficher la vue"> "Autre"> "Contrôle de l'émulateur", et vous pouvez envoyer des coordonnées à partir du volet de contrôle de l'émulateur qui apparaît.
runOnFirstFix
? Parce que c'est l'événement qui est déclenché lorsque l'appareil reçoit la position GPS pour la première fois, donc si cela se produit, il getMyLocation
devrait certainement retourner une valeur.
Pour le nouvel émulateur:
http://developer.android.com/tools/devices/emulator.html#extended
Fondamentalement, cliquez sur le bouton à trois points dans les commandes de l'émulateur (à droite de l'émulateur) et il ouvrira un menu qui vous permettra de contrôler l'émulateur, y compris l'emplacement
1. Utilisateurs d'Android Studio.
Après avoir exécuté l'émulateur, accédez à Outils-> Android-> Moniteur de périphérique Android
Cliquez sur la modification de l'onglet Contrôle de l'émulateur dans le groupe de contrôles d'emplacement.
2. Utilisateurs Eclipse.
D'abord dans Eclipse Dans le menu Sélectionnez "Fenêtre" puis sélectionnez "Ouvrir la perspective" puis sélectionnez "DDMS". c'est-à-dire Fenêtre-> Ouvrir la perspective-> DDMS.
Vous verrez sur le panneau des périphériques du côté gauche et sur le côté droit, vous verrez différents onglets. Sélectionnez l'onglet "Emulator Control".
En bas, vous verrez le panneau des commandes de localisation. Sélectionnez l'onglet "Manuel".
Entrez la longitude et la latitude dans les zones de texte, puis cliquez sur le bouton Envoyer. Il vous enverra la position de l'émulateur et de l'application.
3. Utilisation de telnet.
Dans la commande run, tapez ceci.
telnet localhost 5554
Si vous n'utilisez pas Windows, vous pouvez utiliser n'importe quel client Telnet.
Après vous être connecté à 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 Google Maps basé sur un navigateur
Il existe un programme qui utilise GWT et l'API Google Maps pour lancer un outil de carte basé sur un navigateur pour définir l'emplacement GPS dans l'émulateur:
Utilisation de la commande "geo" dans la console de l'émulateur
Pour envoyer des données d'emplacement fictif à partir de la ligne de commande:
Lancez votre application dans l'émulateur Android et ouvrez un terminal / console dans le répertoire / tools de votre SDK.
Connectez-vous à la console de l'émulateur:
telnet localhost 5555
(Remplacez le 5555 par le port sur lequel votre émulateur fonctionne)
Envoyer les données de localisation: * geo fix pour envoyer une géo-localisation fixe.
Cette commande accepte une longitude et une latitude en degrés décimaux et une altitude facultative en mètres. Par exemple:
geo fix -121.45356 46.51119 4392
J'ai écrit un script python pour pousser les emplacements gps vers l'émulateur via telnet. Il définit une source et un emplacement de 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 se déplace de Berlin à Hambourg en 120 secondes. Un emplacement pas / 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()
J'utilise la fonction DDMS de la prise Eclipse pour envoyer le GPS.
Sous Linux où les ports de communication sont bloqués. naviguez le terminal vers le dossier platform-tools à l'intérieur android sdk
et lancez cette commande:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
Sous Mac, Linux ou Cygwin:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
Cela vous mettra à Mexico. Modifiez votre longitude / latitude / altitude en conséquence. Cela devrait suffire si vous n'êtes pas intéressé par nmea.
La solution suivante a fonctionné pour moi - ouvrez la ligne de commande et écrivez:
adb emu geo fix [longtitude] [latitude]
Enfin, avec la dernière version d'Android Studio 4 et sa nouvelle mise à jour Emulator 23/10/2019, cela devient plus facile. Démarrez votre émulateur et accédez aux paramètres de l'émulateur ...> dans l'onglet "Itinéraires" vous pouvez choisir deux points sur la carte de / vers et démarrer un nouvel itinéraire avec une vitesse de lecture réglable qui peut aller à plus de 1000km / h!
Voir Obtention de l'emplacement de l'utilisateur
Regardez sous Fournir des données de localisation simulées . Vous y trouverez la solution.
Allez d'abord dans la section DDMS de votre éclipse puis ouvrez le contrôle de l'émulateur .... Allez dans la section manuelle, définissez lat et long puis appuyez sur le bouton Envoyer
J'essayais de définir le correctif géographique via adb pour de nombreux points et je n'ai pas pu faire en sorte que mon application puisse voir les données GPS. Mais quand j'ai essayé d'ouvrir DDMS, de sélectionner le processus de mon application et d'envoyer des coordonnées via l'onglet de contrôle de l'émulateur, cela a tout de suite fonctionné.
Si vous utilisez Android Studio (1.3):
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 mieux valu adb emu
travailler.
Si les solutions ci-dessus ne fonctionnent pas. Essaye ça:
Dans votre Manifest.xml android, ajoutez les deux liens suivants À L'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>
Je n'ai pas pu obtenir de correctif GPS sur l'émulateur lorsque l'émulateur exécutait une image Android sans les API Google. Dès que j'ai changé l'image pour qu'elle contienne les API Google, toutes les méthodes mentionnées ici pour obtenir un correctif GPS fonctionnent.
Assurez-vous de sélectionner une image avec les API Google lors de la création d'AVD.
La réponse déjà mentionnée à plusieurs reprises pour utiliser la commande shell " geo fix ... " est la bonne réponse. Mais si vous utilisez LocationClient.getLastLocation () pour récupérer vos données, il convient de mentionner que cela ne fonctionnera pas au premier abord. La classe LocationClient utilise le service Google Play pour récupérer les coordonnées. Pour moi, cela a commencé à fonctionner après avoir exécuté l'application de cartes d'émulateurs une fois. Lors du premier démarrage, vous êtes invité à autoriser les applications Google à accéder à votre emplacement, ce qui, je suppose, fait l'affaire.
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, ce qui lui permet de régler la vitesse, le cap, l'heure précise, etc. en plus des lat / lon.
Le service nécessite l'utilitaire de ligne de commande nc (netcat) et rien d'autre.
Vous pouvez utiliser un émulateur comme genymotion qui vous donne la possibilité d'émuler votre position GPS actuelle, etc.
Il existe 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é dans ce lien: Android Studio. Simulez plusieurs points GPS avec Mock Location Plugin
Ouvrez Android studio-> menu Outils-> Android-> Android Device Monitor-> onglet émulateur-> contrôle de l'emplacement-> définissez la latitude et la longitude requises et vérifiez votre projet selon vos besoins
En éclipse:
Vous devrez peut-être faire glisser la fenêtre DDMS vers le bas. Les «contrôles de localisation» se trouvent sous «Actions de téléphonie» et peuvent être masqués par une vue de console de taille normale (la barre avec la console, LogCat, etc. peut la couvrir!)
~