我希望在Android模拟器中获得经度和纬度以进行测试 .
任何人都可以指导我如何实现这一目标吗?
如何将仿真器的位置设置为测试位置?
当模拟器在没有Google API的情况下运行Android映像时,我无法在模拟器上获得GPS修复 . 我一改变图像以包含Google API,所有这里提到的方法来获得GPS修复工作 .
确保在创建AVD时使用Google API选择图像 .
您可以使用像genymotion这样的模拟器,它可以灵活地模拟您当前的GPS位置等 .
如果您正在使用 Eclipse ,请转到 Window->Open Perspective->DDMS ,然后在 Location Controls 中键入一个并按 Send .
Eclipse
Window->Open Perspective->DDMS
Location Controls
Send
对于新的模拟器:
http://developer.android.com/tools/devices/emulator.html#extended
基本上,单击模拟器控件中的三个点按钮(模拟器右侧),它将打开一个菜单,允许您控制模拟器,包括位置
如果上述解决方案不起作用 . 试试这个:
在你的Android Manifest.xml里面,添加以下两个应用程序标签的链接 OUTSIDE ,但当然在你的清单标签里面
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission> <uses-permission android:name="android.permission.INTERNET" ></uses-permission>
对于我自己的项目,我开发了一个在线服务,可以为Android模拟器提供模拟位置 .
它使用geo nmea而不是geo fix,除了lat / lon之外,还可以设置速度,航向,精确时间等 .
该服务需要nc(netcat)命令行实用程序,而不需要其他任何操作 .
http://www.kisstech.ch/nmea/
1. Android Studio users.
运行模拟器后转到Tools-> Android-> Android设备监视器
单击位置控件组中的“模拟器控制选项卡”更改 .
2. Eclipse users.
Eclipse In Eclipse In Menu选择“Window”,然后选择“Open Perspective”,然后选择“DDMS” . 即Window-> Open Prespective-> DDMS .
您将在左侧设备面板和右侧看到您将看到不同的选项卡 . 选择“仿真器控制”选项卡 .
在底部,您将看到位置控制面板 . 选择“手动”选项卡 .
在文本框中输入经度和纬度,然后单击发送按钮 . 它会将位置发送给您的模拟器和应用程序 .
3. Using telnet.
在run命令中输入this .
telnet localhost 5554
如果您不使用Windows,则可以使用任何telnet客户端 .
使用telnet连接后,使用以下命令将您的位置发送到模拟器 .
geo fix long lat geo fix -121.45356 46.51119 4392
4. Use the browser based Google maps tool
有一个程序使用GWT和Google Maps API启动基于浏览器的 Map 工具来设置模拟器中的GPS位置:
android-gps-emulator
我试图通过adb为多点设置地理位置修复,无法让我的应用看到任何GPS数据 . 但是当我尝试打开DDMS时,选择我的应用程序的进程并通过模拟器控制选项卡发送坐标,它就可以立即运行 .
Dalvik Debug Monitor>选择仿真器>仿真器控制选项卡>位置控件 .
DDMS - android_sdk / tools / ddms或android_sdk / tools / monitor
这里没有人提到模拟器本身的内置解决方案,因此对于未来的访问者,我想与视觉分享 .
首先,运行Android Emulator并单击下面显示的菜单按钮(3个点):
然后从左侧窗格中选择 Location 并根据需要更改坐标 . 按 Send 按钮后,更改将立即生效(我建议您打开谷歌 Map 以便更好地理解) .
Android Studio Version: 2.3.3
以下解决方案对我有用 - 打开命令行并写入:
adb emu geo fix [longtitude] [latitude]
在Linux中,通信端口被阻止 . 将终端导航到 android sdk 中的platform-tools文件夹并触发此命令:
android sdk
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
在模拟器控制台中使用“geo”命令
要从命令行发送模拟位置数据:
在Android模拟器中启动应用程序,并在SDK的/ tools目录中打开终端/控制台 .
连接到模拟器控制台:
telnet localhost 5555 (用运行模拟器的任何端口替换5555)
telnet localhost 5555
此命令接受十进制度的经度和纬度,以及以米为单位的可选高度 . 例如:
geo fix -121.45356 46.51119 4392
在Mac,Linux或Cygwin中:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
这将把你带到墨西哥城 . 相应地更改您的经度/纬度/高度 . 如果你对nmea不感兴趣,那就足够了 .
无法发表评论,所以更新@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()
从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
假设您已经设置并运行了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向模拟器发送模拟坐标,请转到“窗口”菜单,选择“显示视图”>“其他”>“模拟器控件”,然后您可以从出现的模拟器控制面板发送坐标 .
已经提到的多次使用shell命令“ geo fix... ”的答案是正确的答案 . 但是如果你使用 LocationClient.getLastLocation() 来检索你的数据,那么值得一提的是它起初不起作用 . LocationClient类使用Google Play服务来检索坐标 . 对我来说,这是在运行模拟器 Map 应用程序之后开始工作的 . 在第一次启动时,系统会要求您允许Google应用访问您的位置,我想这就是诀窍 .
首先进入日食中的DDMS部分比打开模拟器控制....转到手动部分设置lat和long然后按发送按钮
Android Studio有一个名为“Mock Location Plugin”的插件 . 您可以使用此插件模拟多个点 . 您可以在此链接中找到详细的使用手册:Android Studio. Simulate multiple GPS points with Mock Location Plugin
我用eclipse插件DDMS功能发送GPS .
如果您正在使用eclipse,那么使用Emulator控制器,您可以手动设置纬度和经度,并在模拟器中运行基于 Map 的应用程序
您可以通过Telnet连接到仿真器 . 然后,您有一个模拟器控制台,可以输入某些数据,如地理定位,网络等 .
怎么用控制台被广泛解释here . 要连接到控制台,请打开命令行并键入
然后,您可以使用geo命令在使用gps位置提供程序传递给所有程序的设备上设置纬度,经度和所需高度 . 有关详细说明,请参阅上面的链接 .
在控制台中运行的特定命令是
geo fix <longitude value> <latitude value>
我发现这个网站对于找到一个真实的lat / lng非常有用:http://itouchmap.com/latlong.html
如果您需要多个坐标,则可以使用带有路径的kml文件,这在article中有一点描述 . 我目前找不到更好的消息来源 .
见Obtaining User Location
看看Providing Mock Location Data . 你会找到它的解决方案 .
我写了一个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()
我正在寻找一种更好的方法来设置模拟器的GPS坐标,而不是使用 geo fix 并手动确定特定的纬度和经度坐标 .
geo fix
无法找到任何内容,我整理了一个使用GWT和Google Maps API的小程序来启动基于浏览器的 Map 工具来设置模拟器中的GPS位置:
希望它可以用来帮助那些毫无疑问会遇到这个难题/问题的人 .
如果您使用的是Android Studio(1.3):
点击菜单"Tools"
"Android"
"Android device monitor"
点击你当前的模拟器
Tab "Emulator Control"
转到"Location Controls"并输入Lat和Lon
将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 devices
如果 adb emu 工作会更好 .
adb emu
对于Android Studio用户:
运行模拟器,
然后,转到 Tools -> Android ->Android device monitor
Tools -> Android ->Android device monitor
打开 Emulator Control 选项卡,然后使用位置控制组 .
Emulator Control
打开Android工作室 - >工具菜单 - > Android-> Android设备监视器 - >仿真器选项卡 - >位置控制 - >设置所需的纬度和经度,并根据需要检查项目
在日食:
您可能必须向下拖动DDMS窗口 . “位置控制”位于“电话操作”下,可能会被正常大小的控制台视图隐藏(带控制台的栏,LogCat等可能会覆盖它!)
〜
30 回答
当模拟器在没有Google API的情况下运行Android映像时,我无法在模拟器上获得GPS修复 . 我一改变图像以包含Google API,所有这里提到的方法来获得GPS修复工作 .
确保在创建AVD时使用Google API选择图像 .
您可以使用像genymotion这样的模拟器,它可以灵活地模拟您当前的GPS位置等 .
如果您正在使用
Eclipse
,请转到Window->Open Perspective->DDMS
,然后在Location Controls
中键入一个并按Send
.对于新的模拟器:
http://developer.android.com/tools/devices/emulator.html#extended
基本上,单击模拟器控件中的三个点按钮(模拟器右侧),它将打开一个菜单,允许您控制模拟器,包括位置
如果上述解决方案不起作用 . 试试这个:
在你的Android Manifest.xml里面,添加以下两个应用程序标签的链接 OUTSIDE ,但当然在你的清单标签里面
对于我自己的项目,我开发了一个在线服务,可以为Android模拟器提供模拟位置 .
它使用geo nmea而不是geo fix,除了lat / lon之外,还可以设置速度,航向,精确时间等 .
该服务需要nc(netcat)命令行实用程序,而不需要其他任何操作 .
http://www.kisstech.ch/nmea/
1. Android Studio users.
运行模拟器后转到Tools-> Android-> Android设备监视器
单击位置控件组中的“模拟器控制选项卡”更改 .
2. Eclipse users.
Eclipse In Eclipse In Menu选择“Window”,然后选择“Open Perspective”,然后选择“DDMS” . 即Window-> Open Prespective-> DDMS .
您将在左侧设备面板和右侧看到您将看到不同的选项卡 . 选择“仿真器控制”选项卡 .
在底部,您将看到位置控制面板 . 选择“手动”选项卡 .
在文本框中输入经度和纬度,然后单击发送按钮 . 它会将位置发送给您的模拟器和应用程序 .
3. Using telnet.
在run命令中输入this .
如果您不使用Windows,则可以使用任何telnet客户端 .
使用telnet连接后,使用以下命令将您的位置发送到模拟器 .
4. Use the browser based Google maps tool
有一个程序使用GWT和Google Maps API启动基于浏览器的 Map 工具来设置模拟器中的GPS位置:
android-gps-emulator
我试图通过adb为多点设置地理位置修复,无法让我的应用看到任何GPS数据 . 但是当我尝试打开DDMS时,选择我的应用程序的进程并通过模拟器控制选项卡发送坐标,它就可以立即运行 .
Dalvik Debug Monitor>选择仿真器>仿真器控制选项卡>位置控件 .
DDMS - android_sdk / tools / ddms或android_sdk / tools / monitor
这里没有人提到模拟器本身的内置解决方案,因此对于未来的访问者,我想与视觉分享 .
首先,运行Android Emulator并单击下面显示的菜单按钮(3个点):
然后从左侧窗格中选择 Location 并根据需要更改坐标 . 按 Send 按钮后,更改将立即生效(我建议您打开谷歌 Map 以便更好地理解) .
Android Studio Version: 2.3.3
以下解决方案对我有用 - 打开命令行并写入:
在Linux中,通信端口被阻止 . 将终端导航到
android sdk
中的platform-tools文件夹并触发此命令:在模拟器控制台中使用“geo”命令
要从命令行发送模拟位置数据:
在Android模拟器中启动应用程序,并在SDK的/ tools目录中打开终端/控制台 .
连接到模拟器控制台:
telnet localhost 5555
(用运行模拟器的任何端口替换5555)此命令接受十进制度的经度和纬度,以及以米为单位的可选高度 . 例如:
在Mac,Linux或Cygwin中:
这将把你带到墨西哥城 . 相应地更改您的经度/纬度/高度 . 如果你对nmea不感兴趣,那就足够了 .
无法发表评论,所以更新@ectomorphs会在这里回答,现在telneting需要有一个身份验证令牌 . 在linux下,在/home/username/.emulator_console_auth_token下
从shell脚本可以像这样设置coorinate
假设您已经设置并运行了mapview:
您需要在清单中获得以下权限:
要从Eclipse向模拟器发送模拟坐标,请转到“窗口”菜单,选择“显示视图”>“其他”>“模拟器控件”,然后您可以从出现的模拟器控制面板发送坐标 .
已经提到的多次使用shell命令“ geo fix... ”的答案是正确的答案 . 但是如果你使用 LocationClient.getLastLocation() 来检索你的数据,那么值得一提的是它起初不起作用 . LocationClient类使用Google Play服务来检索坐标 . 对我来说,这是在运行模拟器 Map 应用程序之后开始工作的 . 在第一次启动时,系统会要求您允许Google应用访问您的位置,我想这就是诀窍 .
首先进入日食中的DDMS部分比打开模拟器控制....转到手动部分设置lat和long然后按发送按钮
Android Studio有一个名为“Mock Location Plugin”的插件 . 您可以使用此插件模拟多个点 . 您可以在此链接中找到详细的使用手册:Android Studio. Simulate multiple GPS points with Mock Location Plugin
我用eclipse插件DDMS功能发送GPS .
如果您正在使用eclipse,那么使用Emulator控制器,您可以手动设置纬度和经度,并在模拟器中运行基于 Map 的应用程序
您可以通过Telnet连接到仿真器 . 然后,您有一个模拟器控制台,可以输入某些数据,如地理定位,网络等 .
怎么用控制台被广泛解释here . 要连接到控制台,请打开命令行并键入
然后,您可以使用geo命令在使用gps位置提供程序传递给所有程序的设备上设置纬度,经度和所需高度 . 有关详细说明,请参阅上面的链接 .
在控制台中运行的特定命令是
我发现这个网站对于找到一个真实的lat / lng非常有用:http://itouchmap.com/latlong.html
如果您需要多个坐标,则可以使用带有路径的kml文件,这在article中有一点描述 . 我目前找不到更好的消息来源 .
见Obtaining User Location
看看Providing Mock Location Data . 你会找到它的解决方案 .
我写了一个python脚本,通过telnet将gps位置推送到模拟器 . 它定义了源和目标位置 . 还有一个时间偏移,可让您控制将坐标推送到设备的时间长度 . 一个位置每秒推动一次 .
在下面的示例中,脚本在120秒内从柏林移动到汉堡 . 每秒一步/ gps位置随机距离 .
我正在寻找一种更好的方法来设置模拟器的GPS坐标,而不是使用
geo fix
并手动确定特定的纬度和经度坐标 .无法找到任何内容,我整理了一个使用GWT和Google Maps API的小程序来启动基于浏览器的 Map 工具来设置模拟器中的GPS位置:
android-gps-emulator
希望它可以用来帮助那些毫无疑问会遇到这个难题/问题的人 .
如果您使用的是Android Studio(1.3):
点击菜单"Tools"
"Android"
"Android device monitor"
点击你当前的模拟器
Tab "Emulator Control"
转到"Location Controls"并输入Lat和Lon
将Alberto Gaona的答案分成一行
5554是
adb devices
中显示的仿真器端口号 .如果
adb emu
工作会更好 .对于Android Studio用户:
运行模拟器,
然后,转到
Tools -> Android ->Android device monitor
打开
Emulator Control
选项卡,然后使用位置控制组 .打开Android工作室 - >工具菜单 - > Android-> Android设备监视器 - >仿真器选项卡 - >位置控制 - >设置所需的纬度和经度,并根据需要检查项目
在日食:
您可能必须向下拖动DDMS窗口 . “位置控制”位于“电话操作”下,可能会被正常大小的控制台视图隐藏(带控制台的栏,LogCat等可能会覆盖它!)
〜