Android模拟器存在Geolocation问题

时间:2010-11-12 21:10:51

标签: geolocation android-emulator cordova

我现在一直在使用Android和2.2仿真器,刚刚开始遇到问题。我的地理定位未在模拟器中设置。起初我认为这是PhoneGap 0.92的一个问题,但在恢复到.91并打开一个较旧的项目之后也是如此。在DDMS中,我的坐标被设置,我'发送'它们。我也telnet并发出geo fix命令,我得到了一个OK响应。似乎一切都很好,但由于某种原因,模拟器仍然没有任何线索。

我发现了一些较旧的帖子:设置时区。我做到了仍然没有运气。我甚至使用浏览器并转到html5demos.com/geo查看它是否可以找到我,但它没有。

这曾经起作用,不知道从那以后发生了什么。我更新了我的Java 1.6.0.22版本。 Android SDK是2.2,API 8,修订版2。

任何提示或技巧都将不胜感激。我被困在这一点上。

我的Phonegap / JS电话:

var getLocation = function() {
  var suc = function(p){
        alert(p.coords.latitude + " " + p.coords.longitude);
  };
 var fail = function(error){  
    alert('code: '    + error.code    + '\n' +
            'message: ' + error.message + '\n');
  };
  navigator.geolocation.getCurrentPosition(suc,fail);
}

'失败'不断发生。错误代码2.最后一个位置提供程序已禁用。

- UPDATE 还有同样的问题。我找到了一个我在夏天用过的旧版地图应用程序,它是2.1。所以我重新编译并在2.1仿真器上运行它,这也无法正常工作。有趣的是在日食时,我在DDMS并将坐标发送到2.1我'看到'确认它已经在模拟器中发送但是2.2我没有。

最重要的区别是我现在支持代理(新工作),而不是之前。我想我可以在家里试试......不确定这是否重要。

4 个答案:

答案 0 :(得分:12)

您必须将enableHighAccuracy放入getCurrentPosition,例如:

navigator.geolocation.getCurrentPosition(onSuccess, onError, { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true });

接下来,你必须telnet到模拟器,并geo修复你想要的位置(经度,纬度):

kelvin@locahost:~$ telnet localhost 5554
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK
geo fix 101.689453 3.074695
OK
quit
Connection closed by foreign host.

然后运行您的PhoneGap应用程序。

答案 1 :(得分:8)

我发现这项工作的唯一方法是在触发我正在测试的代码后,telnet到模拟器并发出“geo fixitudeitude latitude”。像这样的东西仿效挪威特隆赫姆的GPS坐标(仿真器的端口通常是5554,但这可能因你的设置而异):

kristian@bergman:~$ telnet localhost 5554
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK
geo fix 10.40 63.40
OK
quit
Connection closed by foreign host.

可以找到有关模拟的更多信息here

答案 2 :(得分:6)

我遇到了同样的问题。解决方案在http://docs.phonegap.com/phonegap_geolocation_geolocation.md.html#Geolocation(向下滚动)结束时:

“Android Quirks

除非将enableHighAccuracy选项设置为true,否则Android 2.x模拟器不会返回地理位置结果。

{enableHighAccuracy:true}“

所以你必须在你的navigator.geolocation.getCurrentPosition和navigator.geolocation.watchPosition调用中设置enableHighAccuracy。

答案 3 :(得分:0)

请在geolocationOptions { enableHighAccuracy: true }

中添加navigator.geolocation.getCurrentPosition(suc,fail);

它适用于我。

  

除非将enableHighAccuracy选项设置为true,否则Android 2.x模拟器不会返回地理位置结果。

在DDMS中,我的坐标必须设置并“发送”它们。