【问题标题】:Android Emulator having issues with GeolocationAndroid 模拟器遇到地理定位问题
【发布时间】:2011-05-09 07:36:59
【问题描述】:

我使用 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。最后一个位置提供程序被禁用。

--更新 仍然有同样的问题。我发现了一个我在夏天使用的旧地图应用程序,它是 2.1。所以我重新编译并在 2.1 模拟器上运行它,这也不起作用。有趣的是,当我在 DDMS 中并将坐标发送到 2.1 时,我在 eclipse 中“看到”确认它已在模拟器中发送,但在 2.2 中我没有。

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

【问题讨论】:

  • 你试过了吗/它在手机上工作吗?

标签: geolocation android-emulator cordova


【解决方案1】:

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

“Android 怪癖

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

{ enableHighAccuracy: true }"

因此,您必须在 navigator.geolocation.getCurrentPosition 和 navigator.geolocation.watchPosition 调用中设置 enableHighAccuracy。

【讨论】:

  • 感谢您的提示。但是..仍然没有工作:(我认为这是模拟器的问题(也许)。首先,每次我启动它时,我都会因为某种原因得到愚蠢的日文键盘。如果我然后去一个纯 HTML5 应用程序从 Chrome 获取位置,它不起作用。像这样-> html5demos.com/geo。这在我的浏览器中有效,但在模拟器浏览器上无效。
【解决方案2】:

我发现完成这项工作的唯一方法是远程登录到模拟器并在触发我正在测试的代码后发出“geo fix longitude 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

【讨论】:

  • 我测试了 html5demos.com/geo,这对我也不起作用。但它适用于我自己的所有网站……
【解决方案3】:

你必须把 enableHighAccuracy 放到 getCurrentPosition 中,例如:

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

接下来,您必须 telnet 进入模拟器,并在地理上修复您想要的位置(经度、纬度):

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 应用程序。

【讨论】:

  • 太棒了,这对我有用,谢谢 :) 哦,还要注意任何其他尝试在每次 getcurrentposition 调用之前运行地理修复的人,来自我的实验。不确定会不会更烦人
  • @MikeIsrael 很难再让人讨厌了。
【解决方案4】:

请在navigator.geolocation.getCurrentPosition(suc,fail);中添加geolocationOptions { enableHighAccuracy: true }

它对我有用。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2011-03-16
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多