回答
您可以通过Telnet连接到仿真器。然后你有一个仿真器控制台,可以让你输入某些数据,如地理修正,网络等。
如何使用控制台广泛解释here。 要连接到控制台打开命令行,然后键入
telnet localhost 5554
然后,您可以使用地理命令设置纬度,经度和必要时的高度是使用GPS的位置信息提供传递给所有的程序在设备上。有关详细说明,请参阅上面的链接。
的具体命令控制台运行是
geo fix <longitude value> <latitude value>
我发现这个网站有用寻找一个现实的纬度/经度:http://itouchmap.com/latlong.html
如果您需要更多然后一个坐标,你可以使用KML文件与路线以及这是article一点点描述。目前我找不到更好的来源。
假设你已经有了一个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,转到“窗口”菜单,选择“显示视图”>“其他”>“仿真器控制”,并且可以从出现的仿真器控制面板发送坐标。
但我的朋友在哪里经度和纬度? – UMAR 2010-02-17 10:06:30
我已经尝试过使用此ans向仿真器控件发送模拟值,但是当我按下发送按钮时,它不会执行任何操作,不会显示任何消息确认已发送或未发送的值。 seocnd的东西GeoPoint g = myLocation.getMyLocation(); 正在返回空值。 – UMAR 2010-02-17 10:19:15
你确定你在'runOnFirstFix'中使用它吗?因为这是设备第一次接收GPS位置时引发的事件,所以如果这种情况发生,getMyLocation应该肯定会返回一个值。 – 2010-02-17 10:25:43
我试图通过adb设置地理修复许多点,无法让我的应用程序看到任何GPS数据。但是当我尝试打开DDMS时,选择我的应用程序的进程并通过模拟器控件选项卡发送坐标,它立即工作。
你不需要指定一个过程...或者,也许在2010年的DDMS需要这样做。 – 2012-02-13 22:03:30
我正在寻找更好的方式来设置模拟器的GPS坐标,而不是使用geo fix
并手动确定具体的经纬度坐标。
无法找到任何东西,我放在一起使用GWT和谷歌地图API推出一个基于浏览器的地图工具来设置在模拟器中的GPS定位了一个小程序:
希望它可以用来帮助那些无疑会偶然遇到这个困难/问题的人。
杰出的工具!非常感谢! – 2012-07-18 23:43:14
真的很棒,谢谢! :) – 2013-04-30 18:29:25
哇,谢谢!安装程序工作得很好,但我无法管理到模拟器的连接 - > log打印java.net.ConnectionRefused。然后我尝试了telnet localhost 5554(从终端),它的工作..有其他人在mac上成功地测试了你的模拟器? – ottel142 2013-09-12 09:54:36
在模拟器控制台使用“地理”命令
要通过命令行发送模拟位置数据:
启动你的Android模拟器应用程序并打开终端/控制台在SDK的/ tools目录中。
连接到模拟器控制台:
telnet localhost 5555
发送的位置数据(与任何与您的模拟器上运行更换5555): *地理修复发送一个固定的地理位置。
这个命令接受以十进制度的经度和纬度,以及在米任选高度。例如:
geo fix -121.45356 46.51119 4392
如果您使用Eclipse
,去Window->Open Perspective->DDMS
,然后键入一个在Location Controls
和命中Send
。
这是迄今为止我见过的最简单的方法。确保你设置了你的AVD和GPS支持,然后在DDMS透视点击设备下运行的模拟器,选择中间 - 右侧窗格中的模拟器控制选项卡,然后在底部显示SteveCav提到的位置控制部分(使用Eclipse Juno 4.2 for Java开发人员使用最新的ADT)。我的位置控件面板甚至预装了位置数据。 – 2012-11-17 21:03:19
伟大的答案!与任何IDE工作,因为ddms是sdk的一部分(yoursdkfolder/tools /) – Zarokka 2013-12-05 13:52:16
这个,也不是telnet上面的解释,为我工作。我试图让我的位置像这样,但它仍然是空的。 'LocationManager mlocManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);' 'Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);' – crowmagnumb 2014-07-31 18:13:45
Providing Mock Location Data下看。你会找到它的解决方案。
如果上述解决方案不起作用。试试这个:
里面你的Android的Manifest.xml,添加以下两个链接的应用程序标记的OUTSIDE,但你的课程清单标签内
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
我无法获得GPS定位上模拟器在没有Google API的情况下运行Android图像时的模拟器。只要我将图片更改为包含Google API,就可以使用这里提到的所有方法来获取GPS修正。
确保您在创建AVD时使用Google API选择图像。
你是什么意思的图像,同时创建AVD我怎么会选择一个图像与谷歌API?在eclipse中创建AVD时没有这样的选项。 – user1911703 2015-07-28 03:09:07
确保您已经通过Android SDK管理器下载了带有Google API的图像。 – dvim 2015-07-28 06:57:09
1. Android Studio用户。
运行仿真器转到工具 - > Android-> Android装置监视器
点击从位置控制组模拟器控制选项卡改变之后。
2. Eclipse用户。
首先在Eclipse在菜单中选择“窗口”,然后选择“打开透视图”,然后选择“DDMS”。例如Window-> Open-Pro-> DDMS。
在左边设备小组和右边你会看到不同的选项卡,您将看到。 选择“Emulator Control”选项卡。
底部你会看到位置控制面板。 选择“手动”选项卡。
在文本框中输入经度和纬度,然后单击发送按钮。 它会将位置发送给您的模拟器和应用程序。
3.使用telnet。
在运行命令中输入this。
telnet localhost 5554
如果您不使用Windows,您可以使用任何telnet客户端。
使用telnet连接后,使用以下命令将您的位置发送到模拟器。
geo fix long lat
geo fix -121.45356 46.51119 4392
4.使用基于浏览器的谷歌地图工具
存在使用GWT和谷歌地图API推出一个基于浏览器的地图工具来设置在模拟器中的GPS定位程序:
这个第一个选项适用于我,只需要一点小改动。我无法从Eclipse打开DDMS窗口,只是空白的灰色页面。但是,当我运行模拟器时,如果我从命令提示符(C:\ Program Files \ Android \ android-sdk \ tools \ ddms)打开DDMS,那么我可以看到左边的设备描述的窗口和“Emulator Control “右边的标签。谢谢! – 2013-11-12 02:34:07
的Dalvik调试监视器>选择仿真>模拟器控制选项卡>位置控制。
DDMS - android_sdk /工具/ DDMS或android_sdk /工具/监控
首先去DDMS节在Eclipse 比开放模拟器控制.... 去往组lat和长手册第 和然后按发送按钮
我使用eclipse插件DDMS功能发送GPS。
已经提到多次回答使用shell命令“地理修复...”是正确答案。 但是,如果您使用LocationClient.getLastLocation()来检索您的数据,值得一提的是它不会在第一时间工作。 LocationClient类使用Google Play服务来检索坐标。 对我来说,这个在开始运行仿真器映射应用程序后开始工作。在第一次启动时,您被要求允许谷歌应用程序访问您的位置,我猜这是诀窍。
在通信端口被阻塞的Linux中。导航终端平台的工具文件夹内android sdk
和火命令:如果你使用eclipse然后使用模拟器控制器,你可以手动设置纬度和经度和运行仿真器中的基于地图的应用
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
在eclipse中:
您可能不得不拖动DDMS窗口。 “位置控件”位于“电话操作”下,可能会被正常大小的控制台视图隐藏(带有控制台的栏,LogCat等可能会覆盖它!)
〜
我在模拟器控制下找到了DDMS。位置控件下面的标签。 – user914425 2015-08-11 00:55:35
对于Android的Studio用户:
运行模拟器,
然后,转到Tools -> Android ->Android device monitor
打开Emulator Control
选项卡,并使用该位置的控制组。
在我的情况下,所有的文件都是不可编辑的。你有好主意吗 ? – 2016-10-05 06:49:47
@MustafaOlkun这可能意味着模拟器本身具有这些控件。在模拟器旁边寻找“...”。 – Justin 2016-11-01 23:53:08
我有同样的问题。它们不可编辑。是的,有“......”。但是,当我在那里放置任何东西并发送时,应用程序中没有任何更改... – KansaiRobot 2017-02-01 13:44:20
对于我自己的项目,我开发了一个在线服务,它可以为Android模拟器提供模拟位置。
它使用geo nmea而不是geo fix,它允许它除了lat/lon之外还设置速度,航向,精确时间等。
该服务需要nc(netcat)命令行工具,而不是其他任何东西。
在Mac,Linux或Cygwin的:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
这将让你在墨西哥城。相应地改变你的经度/纬度/高度。如果你对nmea不感兴趣,那应该就够了。
您可能必须将5554调整为您当前的仿真器侦听端口。 – 2015-06-03 21:00:00
我写了一个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()
工程就像一个魅力!感谢分享。 – 2015-08-20 21:06:58
@AlbertoGaona很高兴为你效劳! – user937284 2015-08-20 21:17:43
嗯。我认为有一个小小的错误:据我所知,地理修复信息获取经度和纬度,顺序是:您以相反的方式发送它们。见上面的答案。 – 2015-08-20 21:29:06
如果你使用的是Android工作室(1.3):
- 点击菜单 “工具”
- “Android” 的
- “Android设备监视器”
- 点击您的当前仿真器
- 选项卡“仿真器控制”
- 转到“位置控制”和输入纬度和经度
对于新的模拟器:
http://developer.android.com/tools/devices/emulator.html#extended
基本上,点击在模拟器控制三个点按钮(仿真器的右边),它就会打开一个菜单,这将允许您控制模拟器,包括位置
您可以使用仿真器,如genymotion,它可以灵活地模拟您当前的GPS位置等。
是的,Genymotion运作良好。我无法安装Android地图,但... – KansaiRobot 2017-02-01 13:47:34
@KansaiRobot嗯,我确实需要安装谷歌播放(http://stackoverflow.com/questions/17831990/how-do-you-install-google-frameworks-play -accounts-etc-on-a-genymotion-virt)仿真器 – 2017-02-03 10:14:43
有一个名为“模拟位置插件”的Android Studio插件。 你可以用这个插件模拟多个点。 你可以在这个链接中找到详细的使用手册:Android Studio. Simulate multiple GPS points with Mock Location Plugin
还不能评论,所以更新@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
以下解决方案为我 - 开放的命令行写:
adb emu geo fix [longtitude] [latitude]
只是要阿尔贝托·高纳的回答为一行
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
有效,情况会更好。
非常有用的一个班轮!在我的情况下,我不得不删除\ n之间的空格: token = $(cat〜/ .emulator_console_auth_token); cat <(echo -e“auth $ token \ ngeo fix 96.0290791 19.9041016 \ nexit”) - | nc localhost 5554 – Jeremie 2017-03-23 14:36:29
我都做过类似的一个脚本到以前的答案之一,但使用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
- 1. 如何在Android-x86模拟器(VirtualBox)中模拟gps位置?
- 2. 如何在Android模拟器中使用网络位置来模拟GPS?
- 3. Android模拟器 - PhoneGap GPS位置?
- 4. Android模拟器代替GPS位置
- 5. 在android模拟器上模拟GPS
- 6. Android模拟GPS卫星(不仅位置)
- 7. 模拟器上模拟GPS位置的时间不正确
- 8. 在android中模拟位置
- 9. 在Android模拟器上设置GPS位置
- 10. 在Android模拟器中模拟GPS路由
- 11. 模拟位置在Android Studio模拟器中不起作用
- 12. Android - 在IntelliJ模拟器问题中模拟位置
- 13. 在Android模拟器中禁用GPS
- 14. 在Chrome上连续模拟GPS位置
- 15. Android的GPS不能显示我的位置,并在模拟器
- 16. 模拟器位置
- 17. GPS - 如何在Basic4android中设置模拟位置?
- 18. GPS可以在Android手机上模拟吗? (无模拟器)
- 19. 在Android模拟器上模拟GPS速度和标题
- 20. 无法模拟Android模拟器中的位置数据
- 21. Android模拟器在发送模拟位置时重新启动
- 22. 如何在Windows Phone 7模拟器上模拟位置?
- 23. 钛地理位置在Android模拟器
- 24. 在模拟器上的Android位置
- 25. 如何模拟没有GPS位置或不好的位置
- 26. Android:在模拟器中模拟WiFi?
- 27. 在Android设备上设置模拟GPS位置
- 28. Android模拟器地理修复无法设置GPS定位
- 29. Android模拟器的GPS位置给出错误的时间
- 30. 用位置预配置Android模拟器?
如果您使用Genymotion:http://stackoverflow.com/questions/30709329/give-fake-location-to-genymotion-emulator – 2016-09-09 20:22:14
您可以安装其中一个模拟位置应用程序s在Play商店。 – whoKnows 2017-11-01 20:37:50