Как эмулировать местоположение GPS в эмуляторе Android?

Я хочу получить долготу и широту в эмуляторе Android для тестирования.

может ли кто-нибудь указать мне, как этого достичь?

Как установить местоположение эмулятора в тестовое положение?

30 ответов


вы можете подключиться к эмулятору через Telnet. Затем у вас есть консоль эмулятора, которая позволяет вводить определенные данные, такие как исправления geo, сеть и т. д.

Как использовать консоль подробно описано здесь. Для подключения к консоли откройте командную строку и введите

telnet localhost 5554

затем вы можете использовать команду geo для установки широты, долготы и при необходимости высоты на устройстве, которое передается всем программам с помощью поставщика местоположения gps. См. ссылку выше для дальнейших инструкций.

конкретная команда для запуска в консоли -

geo fix <longitude value> <latitude value>

Я нашел этот сайт полезным для поиска реалистичного lat / lng:http://itouchmap.com/latlong.html

Если вам нужно более одной координаты, вы можете использовать файл kml с маршрутом, а также немного описано в этом статьи. В данный момент я не могу найти лучшего источника.


Я искал лучший способ установить GPS-координаты эмулятора, чем использовать geo fix и вручную определять специфические координаты широты и долготы.

не удалось найти ничего, я собрал небольшую программу, которая использует GWT и Google Maps API для запуска инструмента карты на основе браузера, чтобы установить местоположение GPS в эмуляторе:

android-gps-эмулятор

надеюсь, это может быть полезно, чтобы помочь другим, которые, несомненно, наткнуться на эту трудность/вопрос.

android-gps-emulator


если вы используете Eclipse перейдите к Window->Open Perspective->DDMS, а затем введите Location Controls и нажмите Send.


никто здесь не упомянул встроенное решение самого эмулятора, поэтому для будущих посетителей я хотел бы поделиться им с визуальными эффектами.

сначала запустите эмулятор Android и нажмите кнопку Меню (3 точки), показанную ниже:

emulator with menu button

затем на левой панели выберите расположение и изменить координаты в соответствии с вашими потребностями. После нажатия отправить кнопка, изменения немедленно вступят в силу (I рекомендуем вам открыть Google Maps для лучшего понимания).

enter image description here

Версия Android Studio: 2.3.3


для пользователей Android Studio:

запустить эмулятор,

перейдите к Tools -> Android ->Android device monitor

открыть , и группы управления.


предполагая, что у вас есть настроенный и запущенный mapview:

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();
    }
});

вам понадобится следующее разрешение в вашем манифесте:

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

и для отправки фиктивных координат эмулятору из Eclipse перейдите в меню "окно", выберите" Показать вид " > "другое" > "управление эмулятором", и вы можете отправить координаты из панели управления эмулятором, которая появляется.


для нового эмулятора:

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

в основном, нажмите на кнопку три точки в элементах управления эмулятора (справа от эмулятора), и он откроет меню, которое позволит вам управлять эмулятором, включая местоположение


1. Пользователи Android Studio.

после запуска эмулятора goto Tools - > Android - >Android Device monitor

перейдите на вкладку изменение элемента управления эмулятора в группе элементы управления местоположением.

2. Пользователи затмение.

первый в Eclipse в меню "окно" выберите "Открыть взгляд", затем выберите "ДДМС". я.окне->открытого перспективе->ДДМС.

вы увидите на левой боковой панели устройства и на правой стороне вы увидите разные вкладки. Выберите Вкладку "Управление Эмулятором".

внизу вы увидите панель управления местоположением. Выберите Вкладку" Руководство".

введите долготу и широту в Textboxs затем нажмите кнопку Отправить. Он отправит вам эмулятор позиции и приложение.

3. Использовать telnet.

в команде run введите это.

telnet localhost 5554

Если вы не используете Windows, вы можете использовать любой клиент telnet.

после подключение к telnet используйте следующую команду для отправки вашей позиции в эмулятор.

geo fix long lat    
geo fix -121.45356 46.51119 4392

4. Используйте браузер на основе Google maps tool

существует программа, которая использует GWT и Google Maps API для запуска инструмента карты на основе браузера, чтобы установить местоположение GPS в эмуляторе:

android-gps-эмулятор


С помощью команды " geo " в консоли эмулятора

для отправки данных о местоположении из командной строки:

  1. запустите приложение в эмуляторе Android и откройте терминал/консоль в каталоге SDK /tools.

  2. подключение к консоли эмулятора:

    telnet localhost 5555 (замените 5555 на любой порт, на котором работает ваш эмулятор)

  3. отправлять данные о местоположении : * исправление geo для отправки фиксированного геолокации.

    эта команда принимает долготу и широту в десятичных градусах и необязательную высоту в метрах. Например:

    geo fix -121.45356 46.51119 4392
    

Я написал скрипт python, чтобы подтолкнуть местоположения gps к эмулятору через telnet. Он определяет источник и место назначения. Существует также смещение времени, которое позволяет контролировать, как долго координаты будут нажаты на устройство. Одно место толкают раз в секунду.

в приведенном ниже примере скрипт перемещается из Берлина в Гамбург за 120 секунд. Один шаг / gps местоположение в секунду со случайными расстояниями.

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

Я использую функцию DDMS eclipse plug для отправки GPS. enter image description here


в Linux, где порты связи заблокированы. перейдите в папку platform-tools терминала внутри android sdk и запустите эту команду:

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

в Mac, Linux или Cygwin:

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

это приведет вас в Мехико. Измените свою долготу / широту / высоту соответственно. Этого должно быть достаточно, если вы не заинтересованы в NMEA.


посмотреть Получение Местоположения Пользователя

посмотреть под Предоставление Данных О Местоположении. Вы найдете решение для этого.


сначала перейдите в раздел DDMS в eclipse Чем открыть эмулятор управления .... Перейти К Разделу Руководство установите lat и long, а затем нажмите кнопку Отправить


для меня сработало следующее решение-откройте командную строку и напишите:

adb emu geo fix [longtitude] [latitude]

Я пытался установить исправление geo через adb для многих точек и не мог заставить мое приложение видеть данные GPS. Но когда я попытался открыть DDMS, выбрав процесс моего приложения и отправив координаты через вкладку управления эмулятором, он сразу же сработал.


Dalvik Debug Monitor > Выберите Эмулятор > Вкладка Управление Эмулятором > Элементы Управления Местоположением.

DDMS -- android_sdk / tools/ddms или android_sdk/tools / monitor


Если вы используете eclipse, то с помощью контроллера эмулятора вы можете вручную установить широту и долготу и запустить приложение на основе карты в эмуляторе


Если вы используете Android Studio (1.3):

  • нажмите на меню "Инструменты"
  • "Android"
  • "монитор устройства Android"
  • нажмите на свой текущий эмулятор
  • Вкладка "Управление Эмулятором"
  • перейдите в раздел "Управление местоположением" и введите Lat и Lon

просто сделайте ответ Альберто Гаоны в одну строку

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

5554-номер порта эмулятора показали в adb devices.

было бы лучше, если adb emu работа.


Если вышеуказанные решения не работают. Попробуйте это:

внутри вашего Манифеста android.xml, добавьте следующие две ссылки за пределами тега приложения, но внутри вашего тега манифеста, конечно

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

Я не смог получить исправление GPS на эмуляторе, когда эмулятор работал под управлением Android image без Google APIs. Как только я изменил изображение, чтобы содержать Google APIs, все упомянутые здесь способы получить исправление GPS работали.

убедитесь, что вы выбрали изображение с Google APIs при создании AVD.


для собственного проекта Я разработал онлайн-сервис, который может обеспечить имитацию местоположения эмулятора Android.

Он использует geo nmea, а не Geo fix, который позволяет ему устанавливать скорость, курс, точное время и т. д. в дополнение к просто lat / lon.

для службы требуется утилита командной строки nc (netcat) и ничего больше.

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


вы можете использовать эмулятор как genymotion что дает вам гибкость эмулировать ваше настоящее положение ГПС, ЕТК.


существует плагин для Android Studio под названием "Mock Location Plugin". Вы можете эмулировать несколько точек с помощью этого плагина. Подробное руководство по эксплуатации вы можете найти по этой ссылке:Android Studio. Имитация нескольких точек GPS с плагином макет местоположения


открыть Android studio - > меню Инструменты- > Android - > Android Device Monitor - > вкладка эмулятор - >управление местоположением - > установите необходимую широту и долготу и проверьте свой проект в соответствии с вашими потребностями


уже упомянутый несколько раз ответ, чтобы использовать команду оболочки"исправить гео...


в Eclipse:

возможно, вам придется перетащить окно DDMS вниз. "Элементы управления местоположением" расположены под "действиями телефонии" и могут быть скрыты консольным представлением нормального размера ( панель с консолью, LogCat и т. д. может покрывать ее!)

~


пока не могу комментировать, поэтому обновление @ectomorphs отвечает здесь, что при telneting теперь требуется токен auth. В linux это находится под /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()

из сценария оболочки можно установить coorinate так

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