如何在Android模拟器中模拟GPS位置?

UMA*_*MAR 427 testing android geolocation android-emulator

我想在Android模拟器中获得经度和纬度以进行测试.

任何人都可以指导我如何实现这一目标吗?

如何将仿真器的位置设置为测试位置?

Jan*_*usz 434

您可以通过Telnet连接到仿真器.然后,您有一个模拟器控制台,可以输入某些数据,如地理定位,网络等.

这里有广泛的解释如何使用控制台.要连接到控制台,请打开命令行并键入

telnet localhost 5554
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用geo命令在使用gps位置提供程序传递给所有程序的设备上设置纬度,经度和所需高度.有关详细说明,请参阅上面的链接.

在控制台中运行的特定命令是

geo fix <longitude value> <latitude value>
Run Code Online (Sandbox Code Playgroud)

我发现这个网站对于找到一个真实的lat/lng非常有用:http://itouchmap.com/latlong.html

如果您需要多个坐标,则可以使用带路径的kml文件,本文稍介绍一下.我目前找不到更好的消息来源.

  • adb emu geo fix 30.219470 -97.745361 (29认同)
  • `geo fix`命令仅在您首先使用auth`时可用.可能值得一提...... (13认同)
  • 使用geo fix我也设置了模拟纬度和经度仍然获得null位置. (12认同)
  • 记住订单,在拉特之前! (10认同)
  • 在将位置和 GPX 文件添加到 Emulator 的 UI 后,此解决方案没有多大意义。请参阅下面的@eden 答案 (3认同)
  • 或简单的方法在模拟器中打开gps并转到模拟器控件给出虚拟lat,long值并发送给你将在模拟器中获取这些值作为gps位置. (2认同)

dpd*_*ing 106

我正在寻找一种更好的方法来设置模拟器的GPS坐标,而不是使用geo fix和手动确定特定的纬度和经度坐标.

无法找到任何内容,我整理了一个使用GWT和Google Maps API的小程序来启动基于浏览器的地图工具来设置模拟器中的GPS位置:

Android的全球定位系统模拟器

希望它可以用来帮助那些毫无疑问会偶然遇到这个困难/问题的人.

Android的全球定位系统模拟器


ede*_*den 95

这里没有人提到模拟器本身的内置解决方案,因此对于未来的访问者,我想与视觉分享.

首先,运行Android Emulator并单击下面显示的菜单按钮(3个点):

带菜单按钮的模拟器

然后从左侧窗格中选择" 位置"并根据需要更改坐标.按下发送按钮后,更改将立即生效(我建议您打开谷歌地图以便更好地理解).

在此输入图像描述

Android Studio版本:2.3.3

  • 我必须重新启动模拟操作系统才能让它识别新位置。 (5认同)
  • “更改将立即生效”虽然这是事实,但我实际上需要打开 GoogleMaps 一次才能更新位置。(在此之后 GMaps 不需要保持打开状态)如果不打开 GMaps 一次,我的应用程序就无法获取更新的位置... (5认同)
  • 我确认无需登录您的Google帐户即可执行此操作.凉! (4认同)
  • android studio 3.5.1 附带的 android 模拟器在位置选项卡中没有任何发送选项。有一个设置位置按钮,但使用地理定位器包读取时不会更改位置 (2认同)

Ste*_*Cav 80

如果您正在使用Eclipse,请转到Window->Open Perspective->DDMS,然后输入一个Location Controls并点击Send.

  • 这是迄今为止我见过的最简单的方法.确保使用GPS支持设置AVD,然后在DDMS透视图中单击"设备"下运行的模拟器,选择右中窗格中的"模拟器控制"选项卡,然后在底部是SteveCav提到的"位置控制"部分(使用Eclipse Juno 4.2 for Java Developers with the latest ADT).我的位置控制面板甚至预装了位置数据. (8认同)

ofe*_*fer 32

对于Android Studio用户:

运行模拟器,

然后,去 Tools -> Android ->Android device monitor

打开Emulator Control选项卡,然后使用位置控件组.

  • @MustafaOlkun这可能意味着模拟器本身就有这些控件.在模拟器旁边找一个"...". (4认同)
  • 我也有同样的问题.它们是不可编辑的.是的,有"......".但是,当我把任何东西放在那里并发送时,应用程序没有任何变化.... (3认同)

Tim*_*Tim 23

对不起《NecroPost》。有些答案对我的具体问题没有帮助。例如,我将位置设置为阿拉斯加。但是,我的设备仍然显示位于加利福尼亚州山景城(Google 总部)?所以这是我修复的方法:

1)进入位置设置:

在此输入图像描述

2) 设置您的测试位置。我选择了阿拉斯加。

在此输入图像描述

3)谷歌“我的当前位置”并点击图中圈出的地图。 请注意,即使我将位置设置为阿拉斯加,我的虚拟设备仍然认为它位于加利福尼亚州山景城。

在此输入图像描述

4) 单击此位置图标 您的位置现在应该在您的设备上更新。您可以再次通过谷歌搜索“我的当前位置”进行验证。

在此输入图像描述

如果有人遇到同样的问题,我希望我的解决方案对您有所帮助。

  • 你好!这个问题最后你解决了吗?我面临着完全相同的问题。预先感谢您并致以问候 (2认同)

Dav*_*und 13

假设您已经设置并运行了mapview:

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();
    }
});
Run Code Online (Sandbox Code Playgroud)

您需要在清单中获得以下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)

要从Eclipse向模拟器发送模拟坐标,请转到"窗口"菜单,选择"显示视图">"其他">"模拟器控件",然后您可以从出现的模拟器控制面板发送坐标.

  • 但我的朋友经度和纬度在哪里? (3认同)

Muh*_*ria 13

1. Android Studio用户.

运行模拟器后转到Tools-> Android-> Android设备监视器

单击位置控件组中的"模拟器控制"选项卡更改.

2. Eclipse用户.

Eclipse In Eclipse In菜单选择"Window",然后选择"Open Perspective",然后选择"DDMS".即Window-> Open Prespective-> DDMS.

您将在左侧设备面板和右侧看到您将看到不同的选项卡.选择"仿真器控制"选项卡.

在底部,您将看到位置控制面板.选择"手动"选项卡.

在文本框中输入经度和纬度,然后单击发送按钮.它会将位置发送给您的模拟器和应用程序.

3.使用telnet.

在run命令中输入this.

telnet localhost 5554
Run Code Online (Sandbox Code Playgroud)

如果您不使用Windows,则可以使用任何telnet客户端.

使用telnet连接后,使用以下命令将您的位置发送到模拟器.

geo fix long lat    
geo fix -121.45356 46.51119 4392
Run Code Online (Sandbox Code Playgroud)

4.使用基于浏览器的Google地图工具

有一个程序使用GWT和Google Maps API启动基于浏览器的地图工具来设置模拟器中的GPS位置:

Android的全球定位系统模拟器


f.k*_*sis 13

对于新的模拟器:

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

基本上,单击模拟器控件中的三个点按钮(模拟器右侧),它将打开一个菜单,允许您控制模拟器,包括位置


Smi*_*ife 12

最后,随着最新版本的 Android Studio 4 和他的新模拟器更新 10/23/2019,它变得更容易了。启动您的模拟器并转到模拟器参数... > 在“路线”选项卡中,您可以选择地图上的两个点从/到并开始一条具有可调节播放速度的新路线,播放速度可以超过 1000 公里/小时!

在此处输入图片说明


小智 10

在模拟器控制台中使用"geo"命令

要从命令行发送模拟位置数据:

  1. 在Android模拟器中启动您的应用程序,并在SDK的/ tools目录中打开终端/控制台.

  2. 连接到模拟器控制台:

    telnet localhost 5555 (将5555替换为运行模拟器的任何端口)

  3. 发送位置数据:*geo fix以发送固定的地理位置.

    此命令接受十进制度的经度和纬度,以及米的可选高度.例如:

    geo fix -121.45356 46.51119 4392
    
    Run Code Online (Sandbox Code Playgroud)


use*_*284 8

我编写了一个python脚本,通过telnet将gps位置推送到模拟器.它定义了源和目标位置.还有一个时间偏移,可让您控制将坐标推送到设备的时间.一个位置每秒推动一次.

在下面的示例中,脚本将在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()
Run Code Online (Sandbox Code Playgroud)


boi*_*ter 5

我用eclipse插件DDMS功能发送GPS. 在此输入图像描述


小智 5

在Linux中,通信端口被阻止.将终端导航到platform-tools文件夹android sdk并激活此命令:

./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
Run Code Online (Sandbox Code Playgroud)


Alb*_*ona 5

在Mac,Linux或Cygwin中:

echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
Run Code Online (Sandbox Code Playgroud)

这将把你带到墨西哥城.相应地更改您的经度/纬度/高度.如果你对nmea不感兴趣,那就足够了.


Asa*_*ssi 5

以下解决方案为我工作-打开命令行并编写:

adb emu geo fix [longtitude] [latitude]
Run Code Online (Sandbox Code Playgroud)