关于eclipse:无法在Android模拟器中模拟位置数据

Unable to simulate location data in Android emulator

我正在尝试测试我的应用程序,它使用地理定位使用模拟器。这里描述了几种方法。我要去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!

1
2
telnet localhost 5554
geo fix 50 50

它以OK响应但没有任何反应。仍然没有可用的位置数据。

UPDATE3:
我注意到LogCat中存在以下错误的流

1
2
3
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)

该应用程序似乎运行正常,这些错误据说在这里解释。

更新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中看到的内容:


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

hw.gps = yes

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


编辑结束

假设是这样,并且在模拟器中启用了Location,请在模拟器中运行此测试应用程序:LocationTest演示,有关详细信息,请参阅有关检索当前位置的开发文档

此示例实现GooglePlayServicesClient.ConnectionCallbacksGooglePlayServicesClient.OnConnectionFailedListenerLocationListener。在连接LocationClient之前还要检查Google Play服务(这就是我们需要Google Emulator图片的原因。)(参见MainActivity.java)

启动应用程序后,您应该会在状态栏中看到"位置"图标。还要验证GP服务是否存在且LocationClient是否已连接到日志中。

1
2
 D/LocationTest﹕ Google Play services is available.
 D/LocationTest﹕ LocationClient: Connected

使用telnet发送geo fix 66 80(使用OK响应)或使用DDMS的其他有效坐标后,您应该看到:

1
 D/LocationTest﹕ Location changed!

如果您仍然迷失在这种方法中,另一种模拟位置的方法是创建一个Mock Location Provider应用程序。


你真的应该使用GENYMOTION它提供了一个GPS功能,你可以在其中设置位置坐标,加上它比默认模拟器更快,并且几乎在每个操作系统中都能正常工作,下面是关于如何在该页面内应用GPS内容的Docus寻找" GPS小部件"。 祝好运。

从那个窗口射出一枪

genymotino gps widget


你试过免费版的Genymotion吗?它可以作为通过USB连接的真实设备,并可以根据需要创建GPS位置。我知道这不是你的AVD问题的解决方案,但AVD通常是模拟器上Android测试的糟糕解决方案。

如果你想特别测试这个功能,它是免费的。


我尝试使用最新的SDK和adb工具,我发现Google地图和基于网络浏览器的位置(maps.google.com)存在同样的问题。我使用adb命令行以及telnet方法来设置位置。还验证了我的.avd文件有hw.gps=yes(默认设置)。我甚至尝试使用较旧的Google API图片。我确保尝试不同的精度级别 - 仅设备,高精度等。我注意到很多图形渲染问题和logcat中的一些opengl错误消息,类似于你看到的。

我确实让谷歌地图应用程序使用模拟位置功能在Android模拟器上工作。您也可以在真实设备上使用模拟位置,我更喜欢它的性能。有关如何使用模拟位置的详细信息,请参阅此..下载具有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"

出于性能原因,设备是优选的。

更新:
我使用gyebro的LocationTest演示测试,当我使用telnet设置位置参数时,它可以工作。所以问题似乎是谷歌地图或浏览器,而不是模拟器或adb工具。
location test demo


我遇到了同样的错误。 问题是AVD DDMS在其位置坐标中使用逗号而不是点。

使用LAT:-16,691534 LNG:-49,266185这样的东西,你会没事的!


确保您的AVD已将GPS支持硬件设置为true

创建新的AVD>硬件>新建> GPS支持

价值应该是"是"

此外,请确保您的应用以某种方式请求位置更新,否则模拟器将忽略来自DDMS或控制台的任何传入位置。

(要么)

我只是通过telnet使用android控制台,它始终有效。

只需打开命令行即可:

1
telnet localhost 5554

5554是您的模拟器的端口号,通常是但可能会更改,它可以作为PORT:AVD_NAME位于模拟器的窗口框架上。

您应该收到Android控制台消息。

要将位置发送到您的设备,只需输入。

1
geo fix []

两个有效的陈述是

1
2
geo fix -77.036519 38.896143
geo fix -77.036519 38.896143 100

希望这有帮助,它不是DDMS,但它始终有效。你也可以用nmea句子喂它,但我不认为你需要它。