Я хочу получить долготу и широту в эмуляторе Android для тестирования.
Может ли кто-нибудь посоветовать мне, как это сделать?
Как установить местоположение эмулятора в тестовую позицию?
Я хочу получить долготу и широту в эмуляторе Android для тестирования.
Может ли кто-нибудь посоветовать мне, как это сделать?
Как установить местоположение эмулятора в тестовую позицию?
Вы можете подключиться к эмулятору через Telnet. Затем у вас есть консоль эмулятора, которая позволяет вводить определенные данные, такие как гео-исправления, сеть и т.д.
Как использовать консоль подробно объясняется здесь. Для подключения к консоли откройте командную строку и введите
telnet localhost 5554
Затем вы можете использовать команду geo, чтобы установить широту, долготу и, если необходимо, высоту на устройстве, которое передается всем программам с помощью провайдера местоположения GPS. Смотрите ссылку выше для дальнейших инструкций.
Конкретная команда для запуска в консоли
geo fix <longitude value> <latitude value>
Я нашел этот сайт полезным для поиска реалистичного латинского языка: http://itouchmap.com/latlong.html
Если вам нужно больше одной координаты, вы можете использовать файл kml с маршрутом, это немного описано в этой статье. Я не могу найти лучшего источника в данный момент.
Я искал лучший способ установить координаты GPS-эмулятора, используя geo fix
и вручную определить конкретные координаты широты и долготы.
Невозможно найти что-либо, я собрал небольшую программу, которая использует GWT и API Карт Google для запуска инструмента карты на основе браузера для установки местоположения GPS в эмуляторе:
Надеюсь, он может быть полезен, чтобы помочь другим, которые, несомненно, наткнутся на эту проблему/вопрос.
Если вы используете Eclipse
, перейдите к Window->Open Perspective->DDMS
, затем введите один в Location Controls
и нажмите Send
.
Никто здесь не упомянул встроенное решение самого эмулятора, поэтому для будущих посетителей я хотел бы поделиться им с визуальными эффектами.
Сначала запустите эмулятор Android и нажмите кнопку меню (3 точки), показанную ниже:
Затем на левой панели выберите Местоположение и измените координаты в соответствии с вашими потребностями. После нажатия кнопки " Отправить" изменения вступят в силу (я рекомендую вам открыть Google Карты для лучшего понимания).
Версия Android Studio: 2.3.3
Кроме того, для того, чтобы ваши различные местоположения приходили к вашему приложению в режиме реального времени, вы можете использовать файл GPX. Это очень легко создать этот файл по ссылке Google Map:
Используйте кнопку "Загрузить GPS/KML", чтобы загрузить созданный файл в эмулятор, выберите скорость и нажмите зеленую кнопку воспроизведения внизу. Места будут отправлены в режиме реального времени, как показано на рисунке ниже.
Для пользователей 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, перейдите в меню "Окно", выберите "Показать вид" > "Другое" > "Управление эмулятором", и вы можете отправить координаты из панели управления эмулятора.
1. Пользователи Android Studio.
После запуска эмулятора перейдите на Tools-> Android-> монитор устройства Android
Щелкните по вкладке управления эмулятором в группе элементов управления местоположением.
2. Затмение пользователей.
Сначала в Eclipse In Menu Выберите "Window", затем "Open Perspective", затем "DDMS". то есть Window-> Открыть 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 в эмуляторе:
Для нового эмулятора:
http://developer.android.com/tools/devices/emulator.html#extended
В принципе, нажмите кнопку трех точек в элементах эмулятора (справа от эмулятора), и она откроет меню, которое позволит вам управлять эмулятором, включая местоположение
Использование команды "geo" в консоли эмулятора
Чтобы отправить данные определения местоположения из командной строки:
Запустите приложение в эмуляторе Android и откройте терминал/консоль в каталоге SDK/tools.
Подключитесь к консоли эмулятора:
telnet localhost 5555
(Замените 5555 на любой порт, на котором запущен ваш эмулятор)
Отправьте данные о местоположении: * geo fix для отправки фиксированного географического местоположения.
Эта команда принимает долготу и широту в десятичных градусах и дополнительную высоту в метрах. Например:
geo fix -121.45356 46.51119 4392
Я написал python script, чтобы направить gps-адреса в эмулятор через telnet. Он определяет источник и место назначения. Существует также временное смещение, которое позволяет вам контролировать, как долго будут перемещаться координаты на устройство. Одно место разворачивается один раз в секунду.
В приведенном ниже примере script переместится из Берлина в Гамбург за 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 для отправки GPS.
В Linux, где порты связи заблокированы. перейдите к терминалу в папку инструментов платформы внутри 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.
См. Получение местоположения пользователя
Посмотрите под Предоставление данных местоположения Mock. Вы найдете решение для него.
Сначала перейдите в раздел DDMS в своем затмении Чем открыт эмулятор управления.... Перейти к разделу руководства set lat и long, а затем нажмите кнопку "Отправить"
Следующее решение сработало для меня - откройте командную строку и напишите:
adb emu geo fix [longtitude] [latitude]
Я пытался установить geo fix через adb для многих точек и не мог заставить мое приложение видеть данные GPS. Но когда я попытался открыть DDMS, выбрав мой процесс приложения и отправив координаты через вкладку управления эмулятором, он сразу же сработал.
Монитор отладки Dalvik > Выберите эмулятоp > вкладка "Управление эмулятором" > "Элементы управления местоположением".
DDMS - android_sdk/tools/ddms ИЛИ android_sdk/tools/monitor
Если вы используете eclipse, то с помощью эмулятора Emulator вы можете вручную установить широту и долготу и запустить приложение на основе карты в эмуляторе
Если вы используете 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
работает.
Если вышеуказанные решения не работают. Попробуйте следующее:
Внутри вашего андроида Manifest.xml добавьте следующие две ссылки OUTSIDE тега приложения, но в курсе манифеста, конечно
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
Мне не удалось получить исправление GPS на эмуляторе, когда эмулятор запускал изображение Android без API Google. Как только я сменил изображение на Google API, все описанные здесь способы получить исправление GPS.
Перед созданием AVD убедитесь, что вы выбрали изображение с помощью API Google.
Уже упоминавшийся многократный ответ на использование команды оболочки " geo fix..." - правильный ответ. Но если вы используете LocationClient.getLastLocation() для извлечения ваших данных, стоит упомянуть, что сначала это не сработает. Класс LocationClient использует Службу Google Play для извлечения координат. Для меня это начало работать после запуска эмулятора карт приложений один раз. Во время первого запуска вам предлагается разрешить google-приложениям доступ к вашему местоположению, что, я думаю, делает трюк.
Для моего собственного проекта я разработал онлайн-сервис, который может обеспечить имитацию местоположения для эмулятора Android.
Он использует geo nmea, а не geo fix, что позволяет ему задавать скорость, курс, точное время и т.д. в дополнение к только lat/lon.
Для службы требуется утилита командной строки nc (netcat) и ничего больше.
Вы можете использовать эмулятор, например genymotion, который дает вам гибкость для эмуляции вашего текущего местоположения GPS и т.д.
Существует плагин для Android Studio под названием "Mock Location Plugin". Вы можете эмулировать несколько точек с помощью этого плагина. Вы можете найти подробное руководство по этой ссылке: Android Studio. Имитация нескольких точек GPS с помощью плагина размещения Mock
Откройте Android studio- > меню "Инструменты" → Android- > Android Device Monitor- > Tab эмулятора- > Управление местоположением- > Установите требуемую широту и долготу и проверьте свой проект в соответствии с вашими потребностями.
В eclipse:
Возможно, вам придется перетащить окно DDMS. "Элементы управления местоположением" находятся в разделе "Действия телефонии" и могут быть скрыты с помощью консольного представления обычного размера (панель с консолью, LogCat и т.д., Возможно, покрывает ее!)
~
Не могу комментировать, поэтому здесь обновляется @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()
Из оболочки script можно установить коринат таким образом
#!/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