Як наслідувати GPS-розташування в емуляторі Android?


445

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

Чи може хтось мені керувати, як цього досягти?

Як встановити розташування емулятора в тестовому положенні?


Якщо ви використовуєте Genymotion: stackoverflow.com/questions/30709329 / ...
Хашим Benyahia

Ви можете встановити одне з багатьох додатків для макетів розташування в магазині Play.
хтознає

Відповіді:


443

Ви можете підключитися до емулятора через Telnet. Потім у вас є консоль емулятора, яка дозволяє вводити певні дані, такі як геофіксація, мережа тощо.

Як використовувати консоль широко пояснено тут . Для підключення до консолі відкрийте командний рядок і введіть

telnet localhost 5554

Потім ви можете скористатися командою geo для встановлення широти, довготи та, якщо потрібно, висоти на пристрої, який передається всім програмам за допомогою постачальника розташування gps. Щоб отримати подальші вказівки, перегляньте посилання вище.

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

geo fix <longitude value> <latitude value>

Я вважаю цей сайт корисним для пошуку реалістичного lat / lng: http://itouchmap.com/latlong.html

Якщо вам потрібно більше однієї координати, ви можете використовувати файл kml з маршрутом, але це трохи описано в цій статті . Наразі не можу знайти кращого джерела.


13
За допомогою геофіксу я також встановив макетну широту та довготу, все ще отримуючи нульове розташування.
UMAR

2
або простим способом увімкніть gps в емуляторі та перейдіть до управління емулятором, дайте фіктивний lat, довгі значення та надішліть, ви отримаєте ці значення в емуляторі як розташування gps.
УМАР

35
adb emu geo fix 30.219470 -97.745361
Bryan Rehbein

12
Майте на увазі замовлення, тривайте перед лат!
Крістоф

14
geo fixКоманда доступна тільки якщо ви authперший. Можливо, варто згадати ...
арот

126

Ніхто тут не згадував про вбудоване рішення самого емулятора, тому для майбутніх відвідувачів я б хотів поділитися ним із візуальними зображеннями.

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

емулятор з кнопкою меню

Потім виберіть ліву панель Місце розташування та змініть координати відповідно до ваших потреб. Після натискання Надіслати" зміни негайно набудуть чинності (рекомендую відкрити Карти Google для кращого розуміння).

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

Версія Android Studio: 2.3.3

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

  1. Перейдіть на карту google, виберіть розташування, потім натисніть "Напрямки" та введіть друге місце.
  2. Після створення маршруту скопіюйте посилання з браузера
  3. Перейдіть на цей веб-сайт: https://mapstogpx.com та вставте посилання у поле "Поїдемо"
  4. Натисніть кнопку "Поїдемо" і файл GPX буде завантажений

Використовуйте кнопку "Завантажити GPS / KML", щоб завантажити створений файл на ваш емулятор, виберіть швидкість і натисніть зелену кнопку відтворення внизу. Місцезнаходження буде надіслано в режимі реального часу, як показано на малюнку нижче.

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


в цьому рішенні потрібні сервіси відтворення в емуляторі?
Кеван Агера

Я не думаю, що так.
Іден

коли я відкриваю додаток в емуляторі google api client null, тому не можу завантажити карту в емуляторі. і мобільний пристрій для мене нормально.
Кеван Агера

4
Я підтверджую, що для цього не потрібно входити у свій обліковий запис Google. Класно!
xarlymg89

3
Мені довелося перезапустити емульовану ОС, щоб змусити її розпізнати нове місце.
Нейт Уіттакер

109

Я шукав кращий спосіб встановити координати GPS емулятора, ніж використовувати geo fix та вручну визначення конкретних координат широти та довготи.

Неможливо знайти нічого, я зібрав невелику програму, яка використовує GWT та API Google Maps, щоб запустити інструмент карт на основі браузера для встановлення місця розташування GPS в емуляторі:

android-gps-емулятор

Сподіваємось, це може бути корисною для допомоги іншим, хто, безсумнівно, також наткнеться на цю складність / питання.


вау, дякую! налаштування працювало чудово, але я не зміг керувати підключенням до емулятора -> журнал друкує java.net.ConnectionRefused. то я спробував telnet localhost 5554 (з терміналу) і він працював .. хтось ще успішно перевіряв ваш емулятор на mac?
ottel142

1
Я не перевіряв цього, але це виглядає так приголомшливо, я думаю, що Google повинен розповісти про це світові. Прості ідеї завжди найкращі. Чому про це ніхто не думав?
tiktak

@ ottel142 - Так, я фактично працюю на Mac без цієї проблеми (використовуючи Chrome на Mavericks). Я так бачу це ConnectionRefusedповідомлення, якщо запустити емулятор GPS перед запуском віртуального пристрою Android. У верхній частині мого браузера він також говорить : «Помилка створення з'єднання на порту 5554 ...» Все працює відмінно , якщо я натисну на кнопку «Змінити Emulator Port» для повторного підключення
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 (tvojedkfolder / tools /)
Zarokka

1
Це, ані рішення telnet вище, не працювало для мене. Я намагаюся знайти своє місцезнаходження таким чином, але воно все ще є нульовим. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Кромагнамб

Коли я використовую "Керування розташуванням" у DDMS, я отримую таку помилку при спробі надіслати Unable to send command to the emulator. Будь-яка ідея, чому це не працює? Я використовую Nexus 4 AVD
emersonthis

1
Я не в змозі зробити це, щоб органи управління розташуваннями були сірими
Utsav Gupta

33

Для користувачів Android Studio:

запустіть емулятор,

Потім переходьте до Tools -> Android ->Android device monitor

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


У моєму випадку всі файли не можна редагувати. У вас є ідея?
Olkunmustafa

4
@MustafaOlkun Це, ймовірно, означає, що сам емулятор має ці елементи керування. Шукайте "..." поруч із емулятором.
Джастін

3
У мене така ж проблема. Вони не можна редагувати. і так, є "...". Однак, коли я щось кладу туди і
надсилаю,

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
але мій друг, де довгота і широта ??
УМАР

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. Користувачі затемнення.

Спочатку в меню затемнення виберіть "Вікно", потім виберіть "Відкрити перспективу", а потім виберіть "DDMS". тобто Вікно-> Відкрити приціл-> DDMS.

Ви побачите на панелі лівих бокових пристроїв, а на правій стороні ви побачите різні вкладки. Виберіть вкладку «Емулятор управління».

Унизу ви побачите Панель керування розташуванням. Виберіть вкладку "Вручну".

Введіть Довготу та Широту в текстові поля та натисніть кнопку Надіслати. Він надішле позицію вам емулятора та програми.

3. Використання telnet.

У команді run введіть це.

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


Цей перший варіант спрацював для мене, з однією невеликою зміною. Я не зміг відкрити вікно DDMS від Eclipse, у мене просто з’явилася порожня сіра сторінка. Але поки у мене був запущений емулятор, якби я відкрив DDMS з командного рядка (C: \ Program Files \ Android \ android-sdk \ tools \ ddms), я міг би побачити вікно, яке ви описали з пристроями ліворуч та "Управління емулятором" "вкладка праворуч. Дякую!
Ерік Барр

10

Використання команди "geo" в консолі емулятора

Щоб надіслати макетні дані про місцезнаходження з командного рядка:

  1. Запустіть свою програму в емуляторі Android та відкрийте термінал / консоль у каталозі / інструменти SDK.

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

    telnet localhost 5555 (Замініть 5555 будь-яким портом, на якому працює ваш емулятор)

  3. Надішліть дані про місцезнаходження: * geo fix, щоб надіслати фіксовану геолокацію.

    Ця команда приймає довготу і широту в десяткових градусах, а необов'язкову висоту в метрах. Наприклад:

    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()

Працює як шарм! Дякую, що поділились.
Альберто Гаона

Ммммм. Я думаю, що є невелика помилка: наскільки я знаю, повідомлення про геофіксацію отримує Longitude та Latitude у такому порядку: Ви надсилаєте їх навпаки. Дивіться відповіді вище.
Альберто Гаона

Не працює. Емулятор прослуховує порт, але він нічого не отримує.
Durga Swaroop


5

У Linux, де порти зв'язку заблоковані. перейдіть по терміналу до папки інструментів платформи всередині 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.2019 стало простіше. Запустіть емулятор та перейдіть до параметрів емулятора ...> На вкладці "Маршрути" ви можете вибрати дві точки на карті від / до та розпочати новий маршрут з регульованою швидкістю відтворення, що може перевищувати 1000 км / год!

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


так як отримати поточний lat lng?
Махмуд Айман


4

Спочатку перейдіть у розділ DDMS у затемненні, ніж відкрийте керування емулятором.


3

Я намагався встановити геофіксацію через adb для багатьох точок, і не зміг заставити програму бачити дані GPS. Але коли я спробував відкрити DDMS, вибравши процес мого додатка та надсилаючи координати через вкладку управління емулятором, він працював відразу.


Вам не потрібно вказувати процес ... Або, можливо, DDMS в 2010 році вимагає цього робити.

3

Монітор налагодження Dalvik> Виберіть емулятор> Вкладка управління емулятором> Керування розташуванням.

DDMS - android_sdk / tools / ddms АБО android_sdk / tools / monitor


2

Якщо ви використовуєте затемнення, використовуючи контролер емулятора, ви можете вручну встановити широту і довготу і запустити додаток на основі карти в емуляторі


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 додайте наступні два посилання ЗОВНІШЕНЬ тегу програми, але, звичайно, всередині свого тегу маніфесту

<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, усі згадані тут способи роботи GPS-виправлення працювали.

Переконайтеся, що під час створення AVD ви обрали зображення з API API Google.


що ви маєте на увазі під зображенням і створюючи AVD, як я б обрав зображення за допомогою API API? немає таких варіантів під час створення AVD у затемненні.
користувач1911703

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

1

Вже згадана багаторазова відповідь на використання команди оболонки " geo fix ... " є правильною відповіддю. Але якщо ви використовуєте LocationClient.getLastLocation () для отримання своїх даних, варто згадати, що спочатку це не працюватиме. Клас LocationClient використовує службу Google Play для отримання координат. Для мене це почало працювати після запуску програми емуляторів карти один раз. Під час першого запуску вас попросять дозволити додаткам google отримати доступ до вашого місцезнаходження, що, напевно, і робить свою справу.


1

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

Він використовує геомережу, а не геофіксацію, яка дозволяє встановлювати швидкість, хід, точний час тощо, а також лише лат / лон.

Послуга вимагає утиліти nc (netcat) командного рядка та нічого іншого.

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


1

Ви можете використовувати емулятор на зразок genymotion, який дає вам можливість імітувати ваше теперішнє GPS-місцезнаходження тощо.


@KansaiRobot Ну мені потрібно було встановити google play ( stackoverflow.com/questions/17831990/… ) на емуляторі
Neil B


1

Відкрийте студію Android-> Інструменти-> Android-> Монітор пристрою Android-> Вкладка емулятора-> Контроль місцеположення-> Встановіть необхідну широту та довготу та перевіряйте проект відповідно до своїх потреб


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

0

У затемненні:

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

~


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