Как эмулировать местоположение GPS в эмуляторе Android? - PullRequest
417 голосов
/ 17 февраля 2010

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

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

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

Ответы [ 31 ]

2 голосов
/ 26 января 2017

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

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

1 голос
/ 07 ноября 2017

Откройте Android studio-> Меню инструментов-> Android-> Android Device Monitor-> Вкладка Эмулятор-> Управление местоположением-> Установите необходимую широту и долготу и проверьте свой проект в соответствии с вашими потребностями

1 голос
/ 08 октября 2012

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

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

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
1 голос
/ 17 октября 2012

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

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

1 голос
/ 18 июля 2016

Существует плагин для Android Studio, который называется «Mock Location Plugin». Вы можете эмулировать несколько точек с этим плагином. Подробное руководство по использованию вы можете найти по этой ссылке: Android Studio. Имитация нескольких точек GPS с плагином Mock Location

1 голос
/ 06 июня 2016

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

1 голос
/ 24 октября 2013

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

1 голос
/ 02 марта 2015

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

Используется геонема, а не гео-фикс, который позволяет устанавливать скорость, курс, точное время и т. Д. В дополнение к широте / долготе.

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

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

0 голосов
/ 21 августа 2017

Я сделал небольшой скрипт, похожий на один из предыдущих ответов, но с использованием 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

0 голосов
/ 11 октября 2016

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