2014-09-20 156 views
4

我正在尝试测试使用模拟器使用地理位置的我的应用程序。描述了几种方法here。我要去Window->Open Perspective->DDMS,然后输入经纬度。和长。一个在Location Controls,然后我点击“发送”。无法模拟Android模拟器中的位置数据

enter image description here

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

为什么会发生这种情况!?

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

详情:

  • OSX 10.9.4
  • AVD_for_Nexus_4_by_Google瞄准v4.4.2
  • 的Eclipse IDE Android开发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虚拟设备管理器”,然后在我的设备上点击“编辑”时,我看到: enter image description here

没有提到“GPS支持”。

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

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

下面是我在logcat中看到:

+0

'yourLocationClient.getLastLocation()'返回'null'吗?你在实现'LocationListener'吗?任何事都会干扰你的模拟器端口(5554)?您是否尝试过Android Studio(及其Android设备监视器)? – Gyebro 2014-09-23 10:54:28

+0

没有位置侦听器。至于'yourLocatoinClient',我对Android开发很陌生,所以我不确定那是什么。如果你给我说明,我会测试。我还没有尝试过Android Studio,但我尝试过使用Genymotion插件,但仍然无法工作。 – emersonthis 2014-09-23 14:13:26

+0

只需检查您的AVD是否具有以下设置:AVD - >硬件 - >新 - > GPS支持 - >“是” – 2014-09-24 06:41:51

回答

-1

确保您的AVD具有GPS支持的硬件设置为true

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

值应该是“是”

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

(或)

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

只需打开一个命令行和:

telnet localhost 5554 

5554是你的模拟器的端口号,它通常是,但可能会改变,也可以是在模拟器上的端口的窗口FRAM:AVD_NAME。

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

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

geo fix [] 

两个有效的语句将

geo fix -77.036519 38.896143 
geo fix -77.036519 38.896143 100 

希望这有助于它不是DDMS,但它的作品始终。你也可以喂它nmea句子,但我不认为你需要。

+1

感谢您的回答,但您是否阅读过我的问题?我已经尝试了你的建议(更新#2)。另外,我的Eclipse/ADT版本与此不匹配:'New AVD> Hardware> New> GPS support'您可以检查您是否使用与我相同的版本? – emersonthis 2014-09-24 15:42:48

+0

请参阅上面的**更新5 **。 – emersonthis 2014-09-24 16:24:10

5

要检查您是否模拟器支持GPS,去~/.android/avd/<emulatorname>.avd/和检查config.inihardware-qemu.ini(如果存在的话),他们应该包含:

hw.gps = yes

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

编辑结束

假如是这样的话,而且位置是在你的模拟器启用,在模拟器中运行这个测试应用程序:LocationTest demo,详细请见Dev docs on Retrieving the Current Location

该样本执行GooglePlayServicesClient.ConnectionCallbacks,GooglePlayServicesClient.OnConnectionFailedListenerLocationListener。还检查了谷歌与LocationClient连接前播放服务(这就是为什么我们需要一个谷歌仿真图像。)(见MainActivity.java

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

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

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

D/LocationTest﹕ Location changed! 

如果您仍然失去了这种做法,另一方面呃模拟位置的方法是create a Mock Location Provider app

+0

谢谢。我检查了我的所有AVD的config.ini文件,它们都被正确设置为'hw.gps = yes'。看到我的**更新5 **上面。我在Eclipse上工作很慢,所以我还没有尝试过位置测试,但是我不确定它测试的是什么。我知道全球定位系统不可用,因为我可以使用默认的互联网浏览器访问请求地理位置数据的页面,它不起作用。我应该继续进行位置测试吗? – emersonthis 2014-09-24 17:49:22

+0

@SDP我绝对建议尝试一下这个小演示程序(只有一个活动,加上AndroidManifest的一些权限)。我尝试过仿真器的浏览器http://html5demos.com/geo,但它不起作用。 (也许它读取最后一个位置,状态栏中没有位置图标) – Gyebro 2014-09-24 18:05:02

+0

@SDP在我请求位置更新与测试应用程序后,html5demos.com/geo设法获取位置。 (但它并不请求位置更新本身。) – Gyebro 2014-09-24 18:13:59

1

我尝试了最新的SDK和adb工具,我发现基于Google地图和基于Web浏览器的位置(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成功过使用物理的Android设备与模拟位置功能

  • ,你可以设置从附带genymotion

    genyshell.exe -c "gps setstatus enabled" genyshell.exe -c "gps setlatitude 30.3077609" genyshell.exe -c "gps setlongitude -97.7534014"

  • 命令行 genyshell任何你想要的位置

由于性能方面的原因,器件是优选的。

更新:LocationTest demo by gyebro测试和它的作品时,我设置的位置PARAMS使用telnet。所以这个问题似乎与谷歌地图或浏览器,而不是模拟器或adb工具。 location test demo

1

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

这是免费的,如果你想专门测试这个功能。

+0

我曾尝试使用Genymotion的免费版本,但即使在使用按钮设置GPS位置后,它也无法正常工作。我很欣赏这个建议,但这实际上不是我问的问题的答案,所以它可能属于其他地方的讨论。 – emersonthis 2014-09-24 19:47:39

+0

那么,genymotion是一个很棒的模拟器。这是一种遗憾,它不起作用 – Ercan 2014-09-29 15:34:49

+0

Genymotion不再免费! – 2016-12-04 12:08:02

2

你真的应该使用GENYMOTION它提供了GPS功能,其中U设置的位置坐标,再加上它比默认的仿真器速度更快,几乎在每一个操作系统工作正常,继承人的Docus上如何应用GPS的东西该页面内的here寻找“GPS小部件”。祝你好运。

继承人从窗口

genymotino gps widget

0

我是通过同样的错误运行的一个镜头。问题在于AVD DDMS在其位置坐标中使用逗号而不是点。

使用高位:-16,691534 LNG:-49,266185这样的事情,你会没事的!