无法在Android模拟器中模拟位置数据

时间:2014-09-20 20:34:04

标签: android eclipse android-emulator geolocation avd

我正在尝试测试我的应用,它使用地理定位使用模拟器。描述了几种方法here。我要去Window->Open Perspective->DDMS,然后进入lat。而且很长。一个在Location Controls,然后我点击“发送”。

enter image description here

但它不起作用。相反,我看到以下错误:Unable to send command to the emulator.

为什么会这样?!

我认为我的应用程序不是问题,因为我使用模拟器的默认浏览器进行了测试,但它也无法访问位置信息。

详细信息:

  • OSX 10.9.4
  • AVD_for_Nexus_4_by_Google定位v4.4.2
  • 适用于Android开发人员的Eclipse IDE 23.0.2.1259578

更新 我改为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”然后在我的某个设备上点击“编辑”时,这就是我所看到的: enter image description here

没有提到“GPS支持”。

更新5: 我检查了config.ini文件中的所有AVD,它们都被正确设置为hw.gps=yes。我还使用Google API目标创建了AVD,但是我仍然遇到同样的问题。该应用程序加载但没有位置数据可用,具有“位置控制”以及telnet。

更新6: 以下是Gyebro的建议......试图加载他的LocationDemo应用程序... enter image description here

这是我在LogCat中看到的内容:

6 个答案:

答案 0 :(得分:6)

要检查您的模拟器是否支持GPS,请转到~/.android/avd/<emulatorname>.avd/并检查config.inihardware-qemu.ini(如果存在),它们应包含:

  

hw.gps =是

修改
您必须使用Google API系统映像。您应该将Google APIs - API Level 1#设置为目标

编辑结束

假设是这样,并且在您的模拟器中启用了位置,请在模拟器中运行此测试应用程序:LocationTest demo,有关详细信息,请参阅Dev docs on Retrieving the Current Location

此示例实现了GooglePlayServicesClient.ConnectionCallbacksGooglePlayServicesClient.OnConnectionFailedListenerLocationListener。在连接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小部件”。祝你好运。

从那个窗口看到一个镜头

genymotino gps widget

答案 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文件,该文件可让您模拟不同的位置和移动场景。

所以你可以选择:

  • 使用具有模拟位置功能的物理Android设备
  • 如果您想使用模拟器,请尝试使用模拟位置
  • 我也使用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工具。 location test demo

答案 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句子喂它,但我认为你不需要它。