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


445

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

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

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


Если вы используете Genymotion: stackoverflow.com/questions/30709329/…
Hachem Benyahia

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

Ответы:


443

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

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

telnet localhost 5554

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

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

geo fix <longitude value> <latitude value>

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

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


13
используя geo fix, я также установил макет широты и долготы, все еще получая нулевое местоположение.
UMAR

2
или просто включите gps в эмуляторе и перейдите к элементу управления эмулятора, введите фиктивные значения lat, long и отправьте, и вы получите эти значения в эмуляторе как местоположение gps.
UMAR

35
adb emu geo fix 30.219470 -97.745361
Брайан Ребейн

12
Следите за порядком, пока не закончите!
Кристоф

14
geo fixКоманда доступна только если вы authпервый. Может быть , стоит упомянуть ...
aroth

126

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

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

эмулятор с кнопкой меню

Затем на левой панели выберите Местоположение и измените координаты в соответствии с вашими потребностями. После нажатия кнопки Отправить изменения вступят в силу (я рекомендую вам открыть Google Карты для лучшего понимания).

введите описание изображения здесь

Версия Android Studio: 2.3.3

Кроме того, для того, чтобы ваши различные местоположения приходили к вашему приложению в режиме реального времени, вы можете использовать файл GPX. Создать этот файл очень просто по ссылке в Google Map:

  1. Перейдите на карту Google, выберите местоположение, затем нажмите «Направления» и введите второе местоположение.
  2. После создания маршрута скопируйте ссылку из браузера
  3. Перейдите на этот сайт: https://mapstogpx.com и вставьте ссылку в поле «Let's Go».
  4. Нажмите кнопку «Let's Go» и файл GPX будет загружен

Используйте кнопку «Загрузить GPS / KML», чтобы загрузить созданный файл в эмулятор, выберите скорость и нажмите зеленую кнопку воспроизведения внизу. Места будут отправлены в режиме реального времени, как показано на рисунке ниже.

введите описание изображения здесь


в этом решении нужны игровые сервисы в эмуляторе?
Кеван Агера,

Я так не думаю.
Эдем

когда я открываю приложение в эмуляторе, клиент Google API нулевой, поэтому не может загрузить карту в эмуляторе. и мобильное устройство там нормально для меня.
Кеван Агера

4
Я подтверждаю, что для этого не нужно входить в свою учетную запись Google. Круто!
xarlymg89

3
Мне пришлось перезапустить эмулируемую ОС, чтобы она распознала новое местоположение.
Нейт Уиттакер

109

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

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

андроид-GPS-эмулятор

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


вау, спасибо! Настройка работала нормально, но я не смог управлять подключением к эмулятору -> log print java.net.ConnectionRefused. Затем я попытался telnet localhost 5554 (из терминала), и он работал .. кто-нибудь еще успешно проверил ваш эмулятор на Mac?
ottel142

1
Я не проверял это, но это выглядит так здорово, я думаю, Google должен рассказать об этом миру. Простые идеи всегда самые лучшие. Почему никто не подумал об этом?
Тиктак

@ ottel142 - Да, я работаю на Mac без этой проблемы (используя Chrome на Mavericks). Я вижу это ConnectionRefusedсообщение, если я запускаю эмулятор GPS перед запуском виртуального устройства Android. В верхней части моего браузера также написано «Ошибка при подключении к порту 5554 ...» Все работает нормально, если я нажимаю кнопку «Изменить порт эмулятора» для повторного подключения
dpdearing

Именно то, что мне было нужно.
Дэвид

Это хорошая программа, но локальность системы меняет способ работы поплавков. В моей системе это должно быть как geo fix 42,42 42,42 42запятые вместо точек.
Нуреттин

81

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


8
Это, безусловно, самый простой метод, который я видел. Убедитесь, что вы настроили AVD с поддержкой GPS, затем в перспективе DDMS щелкните эмулятор, работающий в разделе «Устройства», выберите вкладку «Управление эмулятором» в правой правой части центра, а затем в нижней части находится раздел «Элементы управления местоположением», упомянутый SteveCav (Использование Eclipse Juno 4.2 для разработчиков Java с последней версией ADT). Панель «Мое местоположение» была даже предварительно загружена данными о местоположении.
Стивен Магана-Зук

отличный ответ! работает с любой идеей, потому что ddms является частью SDK (yoursdkfolder / tools /)
Zarokka

1
Это, как и вышеприведенное решение telnet, работало на меня. Я пытаюсь получить свое местоположение, как это, но оно все еще нулевое. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Crowmagnumb

Когда я использую «Управление местоположением» в DDMS, я получаю следующую ошибку при попытке отправить Unable to send command to the emulator. Есть идеи, почему это не работает? Я использую Nexus 4 AVD по умолчанию
emersonthis

1
Я не могу сделать это, элементы управления местоположением выделены
серым цветом

33

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

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

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

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


В моем случае все поля не доступны для редактирования. У тебя есть идея?
Olkunmustafa

4
@MustafaOlkun Это, вероятно, означает, что на самом эмуляторе есть эти элементы управления. Ищите «...» рядом с эмулятором.
Джастин

3
У меня такая же проблема. Они не доступны для редактирования. и да, есть "...". Однако, когда я что-то кладу туда и отправляю, в приложении ничего не меняется ....
KansaiRobot

14

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

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, перейдите в меню «Окно», выберите «Показать представление»> «Другое»> «Управление эмулятором», и вы можете отправить координаты из появившейся панели управления эмулятора.


3
но мой друг, где долгота и широта ??
UMAR

1
Я пытался с помощью этого и отправки ложных значений для управления эмулятором, но когда я нажимаю кнопку отправки, он ничего не делает, никакое сообщение не появляется, чтобы подтвердить отправленные значения или нет. Seocnd вещь GeoPoint g = myLocation.getMyLocation (); возвращает нулевое значение.
UMAR

Вы уверены, что используете его внутри runOnFirstFix? Потому что это событие, которое возникает, когда устройство впервые получает GPS-положение, поэтому, если оно когда-либо было поднято, оно getMyLocationобязательно должно вернуть значение.
Дэвид Хедлунд

13

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

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

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


13

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

После запуска эмулятора зайдите в Инструменты-> Android-> Монитор устройства Android

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

2. Затмение пользователей.

Сначала в Eclipse In Menu Выберите «Окно», затем «Открыть перспективу», затем выберите «DDMS». то есть Window-> Open Prespective-> DDMS.

Вы увидите на левой панели устройства и на правой стороне вы увидите различные вкладки. Выберите вкладку «Управление эмулятором».

Внизу вы увидите панель управления местоположением. Выберите вкладку «Вручную».

Введите долготу и широту в текстовые поля, затем нажмите кнопку «Отправить». Он отправит вам позицию эмулятора и приложение.

3. Использование telnet.

В команде запуска введите это.

telnet localhost 5554

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

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

geo fix long lat    
geo fix -121.45356 46.51119 4392

4. Используйте браузерный инструмент Google Maps

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

андроид-GPS-эмулятор


Этот первый вариант работал для меня, с одним небольшим изменением. Я не мог открыть окно DDMS из Eclipse, я просто получил пустую серую страницу. Но в то время как у меня был запущен эмулятор, если я открыл DDMS из командной строки (C: \ Program Files \ Android \ android-sdk \ tools \ ddms), то я мог видеть окно, которое вы описали, с Устройствами слева и «Управление эмулятором» вкладка справа. Спасибо!
Эрик Барр

10

Использование команды "geo" в консоли эмулятора

Чтобы отправить данные фиктивного местоположения из командной строки:

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

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

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

  3. Отправка данных о местоположении: * Географическое исправление для отправки фиксированного географического местоположения.

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

    geo fix -121.45356 46.51119 4392

8

Я написал скрипт на 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()

Работает как шарм! Спасибо, что поделился.
Альберто Гаона

Ммммм. Я думаю, что есть небольшая ошибка: насколько я знаю, сообщение с геофиксом получает Долготу и Широту, в таком порядке: вы отправляете их наоборот. Смотрите ответы выше.
Альберто Гаона

Не работает. Эмулятор прослушивает порт, но ничего не получает.
Дурга Сваруп,


5

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

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

5

В Mac, Linux или Cygwin:

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

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


Возможно, вам придется настроить 5554 в соответствии с текущим портом прослушивания эмулятора.
Альберто Гаона

5

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

adb emu geo fix [longtitude] [latitude]

5

Наконец, с последним выпуском Android Studio 4 и его новым обновлением Эмулятора 23.10.2009 стало проще. Запустите свой эмулятор и перейдите к параметрам эмулятора ...> во вкладке «Маршруты» вы можете выбрать две точки на карте от / до и начать новый маршрут с регулируемой скоростью воспроизведения, которая может достигать более 1000 км / ч!

введите описание изображения здесь


так как получить текущее значение lng?
Махмуд Айман


4

Сначала перейдите в раздел DDMS в вашем затмении, чем откройте эмулятор Control .... Перейти в раздел Manual установите lat и long, а затем нажмите кнопку Send.


3

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


Вам не нужно указывать процесс ... Или, возможно, DDMS в 2010 году требует этого.

3

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

DDMS - android_sdk / tools / ddms ИЛИ android_sdk / tools / monitor


2

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


2

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

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

2

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

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работа.


очень полезный лайнер! в моем случае мне пришлось удалить пробелы между \ n: token = $ (cat ~ / .emulator_console_auth_token); cat <(echo -e "auth $ token \ ngeo fix 96.0290791 19.9041016 \ nexit") - | nc localhost 5554
Джереми

1

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

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

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

1

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

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


Что вы имеете в виду под изображением и при создании AVD, как бы я выбрал изображение с помощью API Google? при создании AVD в затмении таких вариантов нет.
user1911703

Убедитесь, что вы загрузили изображения с помощью API Google через менеджер Android SDK.
dvim

1

Уже упомянутый многократный ответ на использование команды оболочки « geo fix ... » является правильным ответом. Но в случае, если вы используете LocationClient.getLastLocation () для извлечения ваших данных, стоит упомянуть, что сначала они не будут работать. Класс LocationClient использует сервис Google Play для получения координат. Для меня это начало работать после запуска приложения эмуляторов карт. При первом запуске вас попросят разрешить приложениям Google доступ к вашему местоположению, что, я полагаю, сработает.


1

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

Он использует geo nmea, а не geo fix, что позволяет ему устанавливать скорость, курс, точное время и т. Д. В дополнение только к широте / долготе.

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

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




1

Откройте Android studio-> Меню инструментов-> Android-> Android Device Monitor-> Вкладка Эмулятор-> Управление местоположением-> Установите необходимую широту и долготу и проверьте ваш проект в соответствии с вашими потребностями


Вы можете установить статическое значение местоположения (Широта и Долгота), какое местоположение вам нужно проверить непосредственно в части кода?
Premkumar Manipillai

0

В затмении:

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

~


Внутри DDMS я нашел под контролем эмулятора. Вкладка под управлением местоположения.
user914425
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.