Я хочу отримати довготу і широту в емуляторі Android для тестування.
Чи може хтось мені керувати, як цього досягти?
Як встановити розташування емулятора в тестовому положенні?
Я хочу отримати довготу і широту в емуляторі Android для тестування.
Чи може хтось мені керувати, як цього досягти?
Як встановити розташування емулятора в тестовому положенні?
Відповіді:
Ви можете підключитися до емулятора через Telnet. Потім у вас є консоль емулятора, яка дозволяє вводити певні дані, такі як геофіксація, мережа тощо.
Як використовувати консоль широко пояснено тут . Для підключення до консолі відкрийте командний рядок і введіть
telnet localhost 5554
Потім ви можете скористатися командою geo для встановлення широти, довготи та, якщо потрібно, висоти на пристрої, який передається всім програмам за допомогою постачальника розташування gps. Щоб отримати подальші вказівки, перегляньте посилання вище.
Конкретна команда для запуску в консолі
geo fix <longitude value> <latitude value>
Я вважаю цей сайт корисним для пошуку реалістичного lat / lng: http://itouchmap.com/latlong.html
Якщо вам потрібно більше однієї координати, ви можете використовувати файл kml з маршрутом, але це трохи описано в цій статті . Наразі не можу знайти кращого джерела.
geo fix
Команда доступна тільки якщо ви auth
перший. Можливо, варто згадати ...
Ніхто тут не згадував про вбудоване рішення самого емулятора, тому для майбутніх відвідувачів я б хотів поділитися ним із візуальними зображеннями.
Спочатку запустіть Android-емулятор і натисніть кнопку меню (3 крапки), показану нижче:
Потім виберіть ліву панель Місце розташування та змініть координати відповідно до ваших потреб. Після натискання Надіслати" зміни негайно набудуть чинності (рекомендую відкрити Карти Google для кращого розуміння).
Версія Android Studio: 2.3.3
Крім того, для того, щоб різні місця, які надходять до вашої програми в режимі реального часу, ви можете використовувати файл GPX. Створити цей файл за посиланням на Картах Google дуже просто:
Використовуйте кнопку "Завантажити GPS / KML", щоб завантажити створений файл на ваш емулятор, виберіть швидкість і натисніть зелену кнопку відтворення внизу. Місцезнаходження буде надіслано в режимі реального часу, як показано на малюнку нижче.
Я шукав кращий спосіб встановити координати GPS емулятора, ніж використовувати geo fix
та вручну визначення конкретних координат широти та довготи.
Неможливо знайти нічого, я зібрав невелику програму, яка використовує GWT та API Google Maps, щоб запустити інструмент карт на основі браузера для встановлення місця розташування GPS в емуляторі:
Сподіваємось, це може бути корисною для допомоги іншим, хто, безсумнівно, також наткнеться на цю складність / питання.
ConnectionRefused
повідомлення, якщо запустити емулятор GPS перед запуском віртуального пристрою Android. У верхній частині мого браузера він також говорить : «Помилка створення з'єднання на порту 5554 ...» Все працює відмінно , якщо я натисну на кнопку «Змінити Emulator Port» для повторного підключення
geo fix 42,42 42,42 42
коми, а не крапки.
Якщо ви користуєтеся Eclipse
, перейдіть до Window->Open Perspective->DDMS
, а потім введіть його Location Controls
та натисніть Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Будь-яка ідея, чому це не працює? Я використовую Nexus 4 AVD
Для користувачів 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
обов'язково потрібно повернути значення.
Для нового емулятора:
http://developer.android.com/tools/devices/emulator.html#extended
В основному, натисніть кнопку з трьома крапками в елементах управління емулятора (праворуч від емулятора), і це відкриє меню, яке дозволить вам керувати емулятором, включаючи розташування
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 в емуляторі:
Використання команди "geo" в консолі емулятора
Щоб надіслати макетні дані про місцезнаходження з командного рядка:
Запустіть свою програму в емуляторі Android та відкрийте термінал / консоль у каталозі / інструменти SDK.
Підключіться до консолі емулятора:
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()
Для надсилання GPS використовую функцію DDMS-штекера для затемнення.
У 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.
Для мене працювало наступне рішення - відкрити командний рядок і написати:
adb emu geo fix [longtitude] [latitude]
Нарешті, з останньою версією Android Studio 4 та його новим оновленням Емулятора 23.10.2019 стало простіше. Запустіть емулятор та перейдіть до параметрів емулятора ...> На вкладці "Маршрути" ви можете вибрати дві точки на карті від / до та розпочати новий маршрут з регульованою швидкістю відтворення, що може перевищувати 1000 км / год!
Див. Розділ Отримання місцезнаходження користувача
Перегляньте розділ Надання даних про макет місцеположення . Ви знайдете рішення для цього.
Спочатку перейдіть у розділ DDMS у затемненні, ніж відкрийте керування емулятором.
Я намагався встановити геофіксацію через adb для багатьох точок, і не зміг заставити програму бачити дані GPS. Але коли я спробував відкрити DDMS, вибравши процес мого додатка та надсилаючи координати через вкладку управління емулятором, він працював відразу.
Якщо ви використовуєте 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-виправлення працювали.
Переконайтеся, що під час створення AVD ви обрали зображення з API API Google.
Вже згадана багаторазова відповідь на використання команди оболонки " geo fix ... " є правильною відповіддю. Але якщо ви використовуєте LocationClient.getLastLocation () для отримання своїх даних, варто згадати, що спочатку це не працюватиме. Клас LocationClient використовує службу Google Play для отримання координат. Для мене це почало працювати після запуску програми емуляторів карти один раз. Під час першого запуску вас попросять дозволити додаткам google отримати доступ до вашого місцезнаходження, що, напевно, і робить свою справу.
Для власного проекту я розробив онлайн-сервіс, який може забезпечити імітацію місця розташування для емулятора Android.
Він використовує геомережу, а не геофіксацію, яка дозволяє встановлювати швидкість, хід, точний час тощо, а також лише лат / лон.
Послуга вимагає утиліти nc (netcat) командного рядка та нічого іншого.
Ви можете використовувати емулятор на зразок genymotion, який дає вам можливість імітувати ваше теперішнє GPS-місцезнаходження тощо.
Існує плагін для Android Studio під назвою "Mock Location Plugin". За допомогою цього плагіна можна імітувати декілька точок. Детальний посібник із використання ви можете знайти за цим посиланням: Android Studio. Моделюйте декілька точок GPS за допомогою плагіна Mock Location
Відкрийте студію Android-> Інструменти-> Android-> Монітор пристрою Android-> Вкладка емулятора-> Контроль місцеположення-> Встановіть необхідну широту та довготу та перевіряйте проект відповідно до своїх потреб
У затемненні:
Можливо, вам доведеться перетягнути вікно DDMS вниз. "Контроль місцеположення" знаходиться в розділі "Дії телефонії" і може бути прихований переглядом консолі звичайного розміру (панель з консоллю, LogCat тощо може покривати її!)
~