working Comment émuler l'emplacement GPS dans l'émulateur Android?




memu gps not working (20)

Je veux obtenir la longitude et la latitude dans l'émulateur Android pour les tests.

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

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

https://code.i-harness.com


D'abord aller dans la section DDMS de votre éclipse que le contrôle de l'émulateur ouvert .... Aller à la section Manuel lat et long, puis appuyer sur le bouton Envoyer


Dalvik Debug Monitor> Sélectionner l'émulateur> Onglet Contrôle de l'émulateur> Contrôles de position.

DDMS - android_sdk / tools / ddms OU android_sdk / tools / monitor


En supposant que vous ayez un mapview mis en place et en cours d'exécution:

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 fictives à 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 les coordonnées depuis le volet de contrôle de l'émulateur qui apparaît.


Il suffit de faire 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 les adb devices .

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


Impossible d'obtenir une correction GPS sur l'émulateur lorsque l'émulateur exécutait une image Android sans API Google. Dès que j'ai changé l'image pour contenir des API Google, tous les moyens mentionnés ci-dessus pour obtenir une solution GPS ont fonctionné.

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


Impossible de commenter pour le moment, donc la mise à jour de @ectomorphs répond ici, ce qui est nécessaire lorsque telneting a besoin d'un jeton auth. Sous linux, 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 le coorinate comme si

#!/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

J'essayais de régler le géolocalisation via adb pour de nombreux points et je ne pouvais pas obtenir mon application pour voir les données GPS. Mais quand j'ai essayé d'ouvrir DDMS, en sélectionnant le processus de mon application et les coordonnées d'envoi à travers l'onglet de contrôle de l'émulateur, cela a fonctionné tout de suite.


J'utilise la fonction DDMS de la prise eclipse pour envoyer le GPS.


La réponse multiple mentionnée précédemment pour 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 utile 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 des cartes émulateurs une fois. Lors du premier démarrage, il vous est demandé d'autoriser Google Apps à accéder à votre position, ce qui, je pense, est efficace.


La solution suivante a fonctionné pour moi - ligne de commande ouverte et écrire:

adb emu geo fix [longtitude] [latitude]


Pour les utilisateurs d'Android Studio:

lance l'émulateur,

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

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


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

À l'intérieur de votre fichier Manifest.xml, 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>

Si vous utilisez Eclipse , allez dans Window->Open Perspective->DDMS , puis tapez un dans les Location Controls et Location Controls sur Send .


Si vous utilisez eclipse, en utilisant le contrôleur Emulator, vous pouvez définir manuellement la latitude et la longitude et exécuter votre application basée sur la carte dans l'émulateur.


Sous Linux où les ports de communication sont bloqués. naviguer dans le terminal vers le dossier platform-tools à l'intérieur de android sdk et android sdk cette commande:

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

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

Pour envoyer des données de position fictive à partir de la ligne de commande:

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

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

    telnet localhost 5555 (Remplacez 5555 par le port sur lequel votre émulateur s'exécute)

  3. Envoyer les données de localisation: * géolocalisation pour envoyer un 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
    


Vous pouvez vous connecter à l'émulateur via Telnet. Vous avez ensuite une console Emulator qui vous permet d'entrer certaines données comme des géolocalisations, un réseau, etc.

Comment utiliser la console est largement expliqué here . 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 la latitude, la longitude et, si nécessaire, l'altitude sur l'appareil qui est transmise à tous les programmes à l'aide du fournisseur d'emplacement 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 aussi utiliser un fichier kml avec une route, il est un peu décrit dans cet article . Je ne peux pas trouver une meilleure source pour le moment.


Ouvrez le studio Android-> Menu Outils-> Android-> Moniteur de périphérique Android-> onglet Emulateur-> Contrôle de localisation-> Définissez la latitude et la longitude requises et vérifiez votre projet selon vos besoins





geolocation