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

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

Может ли кто-нибудь посоветовать мне, как это сделать?

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

Ответ 1

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

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

telnet localhost 5554

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

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

geo fix <longitude value> <latitude value>

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

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

Ответ 2

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

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

android-gps-emulator

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

android-gps-emulator

Ответ 3

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

Ответ 4

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

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

emulator with menu button

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

enter image description here

Версия Android Studio: 2.3.3

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

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

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

enter image description here

Ответ 5

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

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

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

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

Ответ 6

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

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

Ответ 7

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 в эмуляторе:

Android-GPS-эмулятор

Ответ 8

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

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

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

Ответ 9

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

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

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

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

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

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

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

    geo fix -121.45356 46.51119 4392
    

Ответ 10

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

В Mac, Linux или Cygwin:

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

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

Ответ 15

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

Ответ 16

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

adb emu geo fix [longtitude] [latitude]

Ответ 17

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

Ответ 18

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

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

Ответ 19

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

Ответ 20

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

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

Ответ 21

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

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

Ответ 22

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

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

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

Ответ 23

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

Перед созданием AVD убедитесь, что вы выбрали изображение с помощью API Google.

Ответ 24

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

Ответ 25

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

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

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

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

Ответ 26

Вы можете использовать эмулятор, например genymotion, который дает вам гибкость для эмуляции вашего текущего местоположения GPS и т.д.

Ответ 28

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

Ответ 29

В eclipse:

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

~

Ответ 30

Не могу комментировать, поэтому здесь обновляется @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