Как эмулировать местоположение 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 в эмуляторе:
надеюсь, это может быть полезно, чтобы помочь другим, которые, несомненно, наткнуться на эту трудность/вопрос.
если вы используете Eclipse
перейдите к Window->Open Perspective->DDMS
, а затем введите Location Controls
и нажмите Send
.
никто здесь не упомянул встроенное решение самого эмулятора, поэтому для будущих посетителей я хотел бы поделиться им с визуальными эффектами.
сначала запустите эмулятор Android и нажмите кнопку Меню (3 точки), показанную ниже:
затем на левой панели выберите расположение и изменить координаты в соответствии с вашими потребностями. После нажатия отправить кнопка, изменения немедленно вступят в силу (I рекомендуем вам открыть Google Maps для лучшего понимания).
Версия 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 в эмуляторе:
С помощью команды " geo " в консоли эмулятора
для отправки данных о местоположении из командной строки:
запустите приложение в эмуляторе Android и откройте терминал/консоль в каталоге SDK /tools.
-
подключение к консоли эмулятора:
telnet localhost 5555
(замените 5555 на любой порт, на котором работает ваш эмулятор) -
отправлять данные о местоположении : * исправление 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()
в 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) и ничего больше.
вы можете использовать эмулятор как 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