我正在尝试测试我的应用,它使用地理定位使用模拟器。描述了几种方法here。我要去Window->Open Perspective->DDMS
,然后进入lat。而且很长。一个在Location Controls
,然后我点击“发送”。
但它不起作用。相反,我看到以下错误:Unable to send command to the emulator.
为什么会这样?!
我认为我的应用程序不是问题,因为我使用模拟器的默认浏览器进行了测试,但它也无法访问位置信息。
详细信息:
更新
我改为AVD_for_Galaxy_Nexus_by_Google
但它仍然不起作用,但我不再看到错误。我点击发送,没有任何反应。
UPDATE2: 我已经测试过使用Telnet将位置数据传递给模拟器,并且没有任何反应。没有错误。根本不值一提。 Urgh!
telnet localhost 5554
geo fix 50 50
它以OK
回应,但没有任何反应。仍然没有可用的位置数据。
UPDATE3: 我注意到LogCat中有以下错误的流
09-20 17:58:59.910: E/eglCodecCommon(1777): glUtilsParamSize: unknow param 0x00000b44
09-20 17:58:59.910: E/eglCodecCommon(1777): glUtilsParamSize: unknow param 0x00000bd0
09-20 17:58:59.930: E/eglCodecCommon(1777): **** ERROR unknown type 0x0 (glSizeof,72)
该应用似乎运行正常,这些错误据说是here解释的。
更新4: 我已经看到多个建议来确认我的AVD已启用GPS支持,但此选项/设置不会出现在任何地方。当我打开“Android Virtual Device Manager”然后在我的某个设备上点击“编辑”时,这就是我所看到的:
没有提到“GPS支持”。
更新5:
我检查了config.ini文件中的所有AVD,它们都被正确设置为hw.gps=yes
。我还使用Google API目标创建了AVD,但是我仍然遇到同样的问题。该应用程序加载但没有位置数据可用,具有“位置控制”以及telnet。
更新6: 以下是Gyebro的建议......试图加载他的LocationDemo应用程序...
这是我在LogCat中看到的内容:
答案 0 :(得分:6)
要检查您的模拟器是否支持GPS,请转到~/.android/avd/<emulatorname>.avd/
并检查config.ini
和hardware-qemu.ini
(如果存在),它们应包含:
hw.gps =是
修改强>
您必须使用Google API系统映像。您应该将Google APIs - API Level 1#
设置为目标
编辑结束
假设是这样,并且在您的模拟器中启用了位置,请在模拟器中运行此测试应用程序:LocationTest demo,有关详细信息,请参阅Dev docs on Retrieving the Current Location
此示例实现了GooglePlayServicesClient.ConnectionCallbacks
,GooglePlayServicesClient.OnConnectionFailedListener
和LocationListener
。在连接LocationClient之前还要检查Google Play服务(这就是我们需要 Google 模拟器图片的原因。)(参见MainActivity.java)
启动应用后,您应该会在状态栏中看到“位置”图标。同时验证GP服务是否存在且LocationClient是否已连接到日志中。
D/LocationTest﹕ Google Play services is available.
D/LocationTest﹕ LocationClient: Connected
使用DDMS使用telnet发送geo fix 66 80
(应使用OK
回复)或其他有效坐标后,您应该看到:
D/LocationTest﹕ Location changed!
如果您仍然迷失在这种方法中,另一种模拟位置的方法是create a Mock Location Provider app。
答案 1 :(得分:2)
你真的应该使用 GENYMOTION 它提供了一个GPS功能,你可以在其中设置位置坐标,加上它比默认模拟器更快,并且几乎在每个操作系统中都能正常工作,继续关注如何申请该页面内的GPS内容here会查找“GPS小部件”。祝你好运。
从那个窗口看到一个镜头
答案 2 :(得分:1)
我尝试使用最新的SDK和adb工具,我发现Google地图和基于网络浏览器的位置(maps.google.com)存在同样的问题。我使用adb命令行以及telnet方法来设置位置。还验证了我的.avd文件有hw.gps=yes
(默认设置)。我甚至尝试使用较旧的Google API图片。我确保尝试不同的精度级别 - 仅设备,高精度等。我注意到很多图形渲染问题和logcat中的一些opengl错误消息,类似于你看到的。
我确实让谷歌地图应用程序使用模拟位置功能在Android模拟器上工作。您也可以在真实设备上使用模拟位置,我更喜欢它的性能。有关how to use mock location please see this.的详细信息。下载包含LocationProvider项目的zip文件,该文件可让您模拟不同的位置和移动场景。
所以你可以选择:
我也使用genymotion取得了成功,您可以通过genymotion附带的命令行genyshell
设置您想要的任何位置
genyshell.exe -c "gps setstatus enabled"
genyshell.exe -c "gps setlatitude 30.3077609"
genyshell.exe -c "gps setlongitude -97.7534014"
设备是优选的。
<强>更新强> 我使用LocationTest demo by gyebro进行了测试,当我使用telnet设置位置参数时,它可以正常工作。所以问题似乎是谷歌地图或浏览器,而不是模拟器或adb工具。
答案 3 :(得分:1)
您是否尝试使用Genymotion的免费版本?它可以作为通过USB连接的真实设备,并可以根据需要创建GPS位置。我知道这不是你的AVD问题的解决方案,但AVD通常是模拟器上Android测试的糟糕解决方案。
如果你想特别测试这个功能,它是免费的。
答案 4 :(得分:0)
我遇到了同样的错误。问题是AVD DDMS在其位置坐标中使用逗号而不是点。
使用LAT:-16,691534 LNG:-49,266185这样的东西,你会没事的!
答案 5 :(得分:-1)
确保您的AVD已将GPS支持硬件设置为true
创建新的AVD&gt;硬件&gt;新&gt; GPS支持
价值应该是&#34;是&#34;
此外,请确保您的应用以某种方式请求位置更新,否则模拟器将忽略来自DDMS或控制台的任何传入位置。
(或)
我只是通过telnet使用android控制台,它始终有效。
只需打开一个命令行,然后:
telnet localhost 5554
5554是您的模拟器的端口号,它通常是但可能会更改,它可以在模拟器的窗口框架上显示为PORT:AVD_NAME。
您应该收到Android控制台消息。
要向您的设备发送职位,只需输入。
geo fix []
两个有效的陈述是
geo fix -77.036519 38.896143
geo fix -77.036519 38.896143 100
希望这有帮助,它不是DDMS,但它始终有效。你也可以用nmea句子喂它,但我认为你不需要它。