我希望在Android模拟器中获得经度和纬度以进行测试。
任何人都可以指导我如何实现这个目标吗?
如何将模拟器的位置设置为测试位置?
答案 0 :(得分:427)
您可以通过Telnet连接到仿真器。然后,您有一个模拟器控制台,可以输入某些数据,如地理修复,网络等。
here详细解释了如何使用控制台。 要连接到控制台,请打开命令行并键入
telnet localhost 5554
然后,您可以使用geo命令在使用gps位置提供程序传递给所有程序的设备上设置纬度,经度和所需高度。有关详细说明,请参阅上面的链接。
在控制台中运行的特定命令是
geo fix <longitude value> <latitude value>
我发现此网站对于找到真实的lat / lng非常有用:http://itouchmap.com/latlong.html
如果你需要多个坐标,你可以使用带有路线的kml文件,这在article中有一点描述。我目前找不到更好的消息来源。
答案 1 :(得分:105)
我一直在寻找一种更好的方法来设置模拟器的GPS坐标,而不是使用geo fix
并手动确定特定的纬度和经度坐标。
无法找到任何内容,我整理了一个使用GWT和Google Maps API的小程序来启动基于浏览器的地图工具来设置模拟器中的GPS位置:
希望它可以帮助那些毫无疑问会遇到这个困难/问题的人。
答案 2 :(得分:80)
如果您使用的是Eclipse
,请转到Window->Open Perspective->DDMS
,然后在Location Controls
中输入一个并点击Send
。
答案 3 :(得分:61)
这里没有人提到模拟器本身的内置解决方案,因此对于未来的访问者,我想与视觉效果分享。
首先,运行Android模拟器并单击下面显示的菜单按钮(3个点):
然后从左侧窗格中选择位置并根据需要更改坐标。按发送按钮后,更改将立即生效(建议您打开Google地图以便更好地了解)。
Android Studio版本:2.3.3
此外,要使您的不同位置实时到您的应用程序,您可以使用GPX文件。从Google地图方向链接创建此文件非常容易:
使用&#34;加载GPS / KML&#34;按钮将创建的文件加载到模拟器,选择速度,然后按下底部的绿色播放按钮。地点将实时发送,如下图所示。
答案 4 :(得分:32)
对于Android Studio用户:
运行模拟器,
然后,转到Tools -> Android ->Android device monitor
打开Emulator Control
标签,然后使用位置控制组。
答案 5 :(得分:13)
对于新的模拟器:
http://developer.android.com/tools/devices/emulator.html#extended
基本上,单击模拟器控件中的三个点按钮(模拟器右侧),它将打开一个菜单,允许您控制模拟器包括位置
答案 6 :(得分:13)
<强> 1。 Android Studio用户。
运行模拟器后转到Tools-&gt; Android-&gt; Android设备监视器
单击位置控件组中的“模拟器控制选项卡”更改。
<强> 2。 Eclipse用户。
首先在Eclipse中在菜单中选择“窗口”,然后选择“打开透视图”,然后选择“DDMS”。 即Window-&gt; Open Prespective-&gt; DDMS。
您将在左侧设备面板和右侧看到,您将看到不同的标签。 选择“仿真器控制”选项卡。
在底部,您将看到位置控制面板。 选择“手动”选项卡。
在文本框中输入经度和纬度,然后单击“发送”按钮。 它会将位置发送给您的模拟器和应用程序。
第3。使用telnet。
在运行命令中输入此内容。
telnet localhost 5554
如果您不使用Windows,则可以使用任何telnet客户端。
使用telnet连接后,使用以下命令将您的位置发送到模拟器。
geo fix long lat
geo fix -121.45356 46.51119 4392
<强> 4。使用基于浏览器的Google地图工具
有一个程序使用GWT和Google Maps API启动基于浏览器的地图工具来设置模拟器中的GPS位置:
答案 7 :(得分: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();
}
});
您的清单中需要以下权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
要从Eclipse向模拟器发送模拟坐标,请转到“窗口”菜单,选择“显示视图”&gt; “其他”&gt; “模拟器控制”,您可以从出现的模拟器控制面板发送坐标。
答案 8 :(得分:10)
在模拟器控制台中使用“geo”命令
从命令行发送模拟位置数据:
在Android模拟器中启动您的应用程序,并在SDK的/ tools目录中打开终端/控制台。
连接到模拟器控制台:
telnet localhost 5555
(将5555替换为运行模拟器的任何端口)
发送位置数据: * geo fix发送固定的地理位置。
此命令接受十进制度数的经度和纬度,以及米的可选高度。例如:
geo fix -121.45356 46.51119 4392
答案 9 :(得分: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()
答案 10 :(得分:5)
在Mac,Linux或Cygwin中:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
那将把你带到墨西哥城。相应地更改您的经度/纬度/高度。如果你对nmea不感兴趣,那就足够了。
答案 11 :(得分:5)
我使用eclipse插件DDMS功能发送GPS。
答案 12 :(得分:5)
在通信端口被阻止的Linux中。将终端导航到android sdk
内的platform-tools文件夹并触发此命令:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
答案 13 :(得分:4)
在Providing Mock Location Data下查看。你会找到解决方案。
答案 14 :(得分:4)
以下解决方案对我有用 - 打开命令行并写:
adb emu geo fix [longtitude] [latitude]
答案 15 :(得分:4)
首先进入日食中的DDMS部分 比开放模拟器控制.... 转到手动部分 设置lat和long,然后按发送按钮
答案 16 :(得分:3)
Dalvik Debug Monitor&gt;选择模拟器&gt; <仿真器控制选项卡>位置控制。
DDMS - android_sdk / tools / ddms或android_sdk / tools / monitor
答案 17 :(得分:3)
我试图通过adb为多点设置地理位置修复,无法让我的应用看到任何GPS数据。但是当我尝试打开DDMS时,选择我的应用程序的进程并通过模拟器控制选项卡发送坐标,它就可以立即运行。
答案 18 :(得分:2)
如果您正在使用eclipse,那么使用模拟器控制器,您可以手动设置纬度和经度,并在模拟器中运行基于地图的应用程序
答案 19 :(得分:2)
如果您使用的是Android Studio(1.3):
答案 20 :(得分:2)
将Alberto Gaona的答案分成一行
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
工作会更好。
答案 21 :(得分:1)
已经提到的多次使用shell命令“ geo fix ... ”的答案是正确的答案。 但是如果您使用 LocationClient.getLastLocation()来检索您的数据,那么值得一提的是它最初不起作用。 LocationClient类使用Google Play服务来检索坐标。 对我来说,这是在运行模拟器地图应用程序之后开始工作的。在第一次启动时,系统会要求您允许Google应用访问您的位置,我想这就是诀窍。
答案 22 :(得分:1)
对于我自己的项目,我开发了一个在线服务,可以为Android模拟器提供模拟位置。
它使用geo nmea而不是geo fix,除了lat / lon之外,还可以设置速度,航向,精确时间等。
该服务需要nc(netcat)命令行实用程序,而不需要其他任何内容。
答案 23 :(得分:1)
当模拟器在没有Google API的情况下运行Android图像时,我无法在模拟器上获得GPS修复。只要我将图像更改为包含Google API,就会提到所有这里提到的GPS修复方法。
确保在创建AVD时选择使用Google API的图片。
答案 24 :(得分:1)
您可以使用genymotion之类的模拟器,让您可以灵活地模拟当前的GPS位置等。
答案 25 :(得分:1)
Android Studio有一个名为“Mock Location Plugin”的插件。 您可以使用此插件模拟多个点。 您可以在此链接中找到详细的使用手册:Android Studio. Simulate multiple GPS points with Mock Location Plugin
答案 26 :(得分:1)
如果上述解决方案无效。试试这个:
在Android Manifest.xml中,添加应用程序标记的以下两个链接 OUTSIDE ,但当然在您的清单标记内
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
答案 27 :(得分:1)
最后,使用最新版本的Android Studio 4和他的新仿真器更新10/23/2019,变得更加容易。 启动仿真器并转到仿真器参数...>在“路线”选项卡中,您可以在地图上从/到两个点选择一条新路线,并以可调的播放速度开始一条新路线,该速度可以超过1000 km / h!
答案 28 :(得分:1)
打开Android工作室 - &gt;工具菜单 - &gt; Android-&gt; Android设备监视器 - >模拟器选项卡 - &gt;位置控制 - &gt;设置所需的纬度和经度,并根据需要检查项目
答案 29 :(得分:0)
答案 30 :(得分:0)
我在Android Studio 3.5.1上遇到了同样的问题 当我单击Android模拟器右侧的三个点并选择“位置”标签时,我看不到发送选项。我试图设置一个位置点,但这并没有更改我的默认cupertino位置。 打开Google地图,它将自动为您定位,您的Cupertino位置也会更改。
答案 31 :(得分:0)
我制作了一个类似于之前答案之一的小脚本,但使用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
答案 32 :(得分:0)
尚未发表评论,所以更新@ectomorphs会在这里回答,现在telneting需要有一个身份验证令牌。在/home/username/.emulator_console_auth_token
下的linux中#!/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()
从shell脚本可以像这样设置coorinate
#!/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
答案 33 :(得分:0)
在日食中:
您可能需要向下拖动DDMS窗口。 &#39;位置控制&#39;位于&#39; Telephony Actions&#39;并且可能被正常大小的控制台视图隐藏(带控制台的栏,LogCat等可能会覆盖它!)
〜