Я хочу получить долготу и широту в эмуляторе Android для тестирования.
Может ли кто-нибудь подсказать мне, как этого добиться?
Как установить расположение эмулятора в тестовое положение?
Я хочу получить долготу и широту в эмуляторе Android для тестирования.
Может ли кто-нибудь подсказать мне, как этого добиться?
Как установить расположение эмулятора в тестовое положение?
Вы можете подключиться к эмулятору через Telnet. Затем у вас есть консоль эмулятора, которая позволяет вам вводить определенные данные, такие как географические исправления, сеть и т. Д.
Использование консоли подробно объясняется здесь. Чтобы подключиться к консоли, откройте командную строку и введите
telnet localhost 5554
Затем вы можете использовать команду geo, чтобы установить на устройстве широту, долготу и, если необходимо, высоту, которые передаются всем программам, использующим поставщика местоположения gps. См. Ссылку выше для получения дальнейших инструкций.
Конкретная команда для запуска в консоли:
geo fix <longitude value> <latitude value>
Я нашел этот сайт полезным для поиска реалистичных широты и долготы: http://itouchmap.com/latlong.html
Если вам нужно более одной координаты, вы можете использовать файл kml с маршрутом, это немного описано в этом article. На данный момент я не могу найти лучшего источника.
geo fix
доступна, только если вы сначала auth
. Стоит упомянуть ...
- person aroth; 26.07.2016
geo fix 40 57.5555 0 12
выдает ошибку: KO: argument '.5555 0 12' is not a number
. Хотя работает следующее: geo fix 40 57,5555 0 12
. Вероятно, это какая-то проблема, связанная с локализацией.
- person ezze; 16.10.2017
Никто здесь не упомянул встроенное решение самого эмулятора, поэтому для будущих посетителей я хотел бы поделиться им с визуализацией.
Сначала запустите эмулятор Android и нажмите кнопку меню (3 точки), показанную ниже:
Затем на левой панели выберите Местоположение и измените координаты в соответствии с вашими потребностями. После нажатия кнопки Отправить изменения сразу же вступят в силу (я рекомендую вам открыть Карты Google для лучшего понимания).
Версия Android Studio: 2.3.3
Кроме того, чтобы ваши различные местоположения поступали в ваше приложение в режиме реального времени, вы можете использовать файл GPX. Этот файл очень легко создать по ссылке направления Google Map:
Используйте кнопку «Загрузить GPS / KML», чтобы загрузить созданный файл в эмулятор, выберите скорость и нажмите зеленую кнопку воспроизведения внизу. Локации будут отправлены в режиме реального времени, как показано на картинке ниже.
Я искал лучший способ установить координаты GPS эмулятора, чем использование geo fix
и ручное определение конкретных координат широты и долготы.
Не сумев ничего найти, я собрал небольшую программу, которая использует GWT и Google Maps API, чтобы запустить инструмент карты на основе браузера, чтобы установить местоположение GPS в эмуляторе:
Надеюсь, это может быть полезно, чтобы помочь другим, кто, несомненно, тоже наткнется на эту трудность / вопрос.
ConnectionRefused
, если я запускаю эмулятор GPS перед запуском виртуального устройства Android. В верхней части браузера также отображается сообщение Ошибка при подключении к порту 5554 ... Все работает нормально, если я нажимаю кнопку «Изменить порт эмулятора» для повторного подключения.
- person dpdearing; 06.04.2014
geo fix 42,42 42,42 42
запятые вместо точек.
- person nurettin; 19.06.2016
String.format("geo fix %f %f
на GeoFixAsyncCallback.onSuccess
вместо объединения с плавающей точкой с +
- person nurettin; 23.06.2016
Если вы используете Eclipse
, перейдите к Window->Open Perspective->DDMS
, затем введите его в Location Controls
и нажмите Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
- person crowmagnumb; 31.07.2014
Unable to send command to the emulator
. Есть идеи, почему это не работает? Я использую Nexus 4 AVD по умолчанию
- person emersonthis; 21.09.2014
Для пользователей Android Studio:
запустить эмулятор,
Затем перейдите к Tools -> Android ->Android device monitor
откройте вкладку Emulator Control
и используйте группу элементов управления местоположением.
Предполагая, что у вас настроен и запущен просмотр карты:
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, перейдите в меню «Окно», выберите «Показать вид»> «Другое»> «Управление эмулятором», и вы можете отправить координаты из появившейся панели управления эмулятором.
runOnFirstFix
? Потому что это событие возникает, когда устройство впервые получает координаты GPS, поэтому, если оно когда-либо возникает, getMyLocation
обязательно должен вернуть значение.
- person David Hedlund; 17.02.2010
Для нового эмулятора:
http://developer.android.com/tools/devices/emulator.html#extended
По сути, нажмите кнопку с тремя точками в элементах управления эмулятором (справа от эмулятора), и откроется меню, которое позволит вам управлять эмулятором, включая местоположение.
1. Пользователи Android Studio.
После запуска эмулятора перейдите в Инструменты- ›Android-› Монитор устройства Android.
Щелкните вкладку Emulator Control Tab в группе элементов управления расположением.
2. Пользователи Eclipse.
Сначала в меню «Eclipse» выберите «Окно», затем выберите «Открыть перспективу», затем выберите «DDMS». т.е. Окно- ›Открыть предполагаемое-› DDMS.
Вы увидите на левой панели устройств, а на правой стороне вы увидите разные вкладки. Выберите вкладку управления эмулятором.
Внизу вы увидите панель управления местоположением. Выберите вкладку «Вручную».
Введите долготу и широту в текстовые поля, затем нажмите кнопку «Отправить». Он отправит позицию вам в эмулятор и приложение.
3. Используя telnet.
В команде запуска введите это.
telnet localhost 5554
Если вы не используете Windows, вы можете использовать любой клиент Telnet.
После подключения к telnet используйте следующую команду, чтобы отправить вашу позицию в эмулятор.
geo fix long lat
geo fix -121.45356 46.51119 4392
4. Используйте инструмент Google Maps в браузере
Существует программа, которая использует GWT и Google Maps API для запуска инструмента карты на основе браузера, чтобы установить местоположение GPS в эмуляторе:
Наконец, с последним выпуском Android Studio 4 и его новым обновлением эмулятора 23.10.2019 это стало проще. Запустите свой эмулятор и перейдите к параметрам эмулятора ...> на вкладке «Маршруты» вы можете выбрать две точки на карте от / до и начать новый маршрут с регулируемой скоростью воспроизведения, которая может достигать более 1000 км / ч!
Используя команду "geo" в консоли эмулятора
Чтобы отправить фиктивные данные о местоположении из командной строки:
Запустите приложение в эмуляторе Android и откройте терминал / консоль в каталоге SDK / tools.
Подключаемся к консоли эмулятора:
telnet localhost 5555
(замените 5555 любым портом, на котором работает ваш эмулятор)
Отправьте данные о местоположении: * geo fix, чтобы отправить фиксированное географическое местоположение.
Эта команда принимает долготу и широту в десятичных градусах и необязательную высоту в метрах. Например:
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()
У меня сработало следующее решение - откройте командную строку и напишите:
adb emu geo fix [longtitude] [latitude]
В Mac, Linux или Cygwin:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
Это доставит вас в Мехико. Соответственно измените свою долготу / широту / высоту. Этого должно быть достаточно, если вас не интересует nmea.
Я использую функцию DDMS затмения для отправки GPS.
В Linux, где коммуникационные порты заблокированы. переместите терминал в папку инструментов платформы внутри android sdk
и запустите эту команду:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
См. Получение местоположения пользователя
Просмотрите раздел Предоставление фиктивных данных о местоположении. Вы найдете для этого решение.
Сначала перейдите в раздел DDMS в своем затмении, чем откройте элемент управления эмулятором .... Перейдите в раздел вручную, установите широту и долготу, а затем нажмите кнопку отправки
Я пытался установить географическое исправление через adb для многих точек и не мог заставить мое приложение видеть какие-либо данные GPS. Но когда я попытался открыть DDMS, выбрав процесс своего приложения и отправив координаты через вкладку управления эмулятором, это сразу сработало.
Dalvik Debug Monitor> Выберите эмулятор> вкладка Emulator Control> Location Controls.
DDMS - android_sdk / tools / ddms ИЛИ android_sdk / tools / monitor
Если вы используете eclipse, то с помощью контроллера эмулятора вы можете вручную установить широту и долготу и запустить приложение на основе карты в эмуляторе.
Если вы используете Android Studio (1.3):
Просто сделайте ответ Альберто Гаоны одной строкой
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 Manifest.xml добавьте следующие две ссылки ВНЕ тега приложения, но, конечно, внутри тега манифеста
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
Мне не удалось получить исправление GPS на эмуляторе, когда на эмуляторе был запущен образ Android без API Google. Как только я изменил изображение, чтобы оно содержало API Google, все упомянутые здесь способы исправления GPS заработали.
Убедитесь, что вы выбрали изображение с API Google при создании AVD.
Уже упомянутый многократный ответ на использование команды оболочки "geo fix ..." является правильным ответом. Но если вы используете LocationClient.getLastLocation () для получения данных, стоит упомянуть, что сначала он не будет работать. Класс LocationClient использует сервис Google Play для получения координат. Для меня это начало работать после того, как однажды запустил приложение эмуляторов карт. Во время первого запуска вас просят разрешить приложениям Google доступ к вашему местоположению, что, я думаю, помогает.
Для собственного проекта я разработал онлайн-сервис, который может предоставить эмулятору Android смоделированное местоположение.
Он использует географические координаты, а не географические координаты, которые позволяют устанавливать скорость, курс, точное время и т. Д. В дополнение к широте и долготе.
Службе требуется утилита командной строки nc (netcat) и ничего больше.
Вы можете использовать эмулятор, например genymotion, который дает вам гибкость для эмуляции вашего текущего местоположения по GPS и т. Д.
Для Android Studio существует плагин «Mock Location Plugin». Вы можете эмулировать несколько точек с помощью этого плагина. Вы можете найти подробное руководство по использованию по этой ссылке: Android Studio. Имитация нескольких точек GPS с помощью плагина Mock Location
Пока не могу комментировать, поэтому обновите здесь ответ @ectomorphs, который при использовании telneting теперь требует наличия токена аутентификации. В 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()
Из сценария оболочки можно установить координату следующим образом
#!/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
Откройте Android studio-> меню инструментов-> Android-> Android Device Monitor-> вкладка эмулятора-> контроль местоположения-> Установите требуемую широту и долготу и проверьте свой проект в соответствии с вашими потребностями.
В затмении:
Возможно, вам придется перетащить окно DDMS вниз. «Управление расположением» находится в разделе «Действия с телефонной связью» и может быть скрыто консольным видом обычного размера (панель с консолью, LogCat и т. Д. Может закрывать его!)
~
Я сделал небольшой скрипт, похожий на один из предыдущих ответов, но с использованием expect
вместо python
- потому что он немного проще (expect
был изобретен для этого).
#!/usr/bin/expect
set port [lindex $argv 0]
set lon [lindex $argv 1]
set lat [lindex $argv 2]
set timeout 1
spawn telnet localhost $port
expect_after eof { exit 0 }
## interact
expect OK
set fp [open "~/.emulator_console_auth_token" r]
if {[gets $fp line] != -1} {
send "auth $line\r"
}
send "geo fix $lon $lat\r"
expect OK
send "exit\r"
Пример использования: sendloc 5554 2.35607 48.8263
У меня была такая же проблема в Android Studio 3.5.1. Когда я щелкнул три точки справа от эмулятора Android и выбрал вкладку местоположения, я не увидел параметр отправки. Я попытался установить точку местоположения, но это не изменило мое местоположение в купертино по умолчанию. Откройте карты Google, и он автоматически определит ваше местоположение, и ваше местоположение купертино изменится.
Перейдите к Extended controls
в эмуляции. После этого вы можете установить местоположение для эмуляции, выполнив поиск или перетащив карту в то место, которое вы хотите установить.
Наконец, нажмите кнопку SET LOCATION
, чтобы сохранить.