Phonegap Geolocation不工作

时间:2013-05-31 20:41:32

标签: android geolocation cordova

我正在使用Phonegap.Geolocation来获取用户的当前位置。

我在官方网站的文档中找到了this example

然而,即使执行了onDevice ready,也不会执行成功或错误函数回调。我真的很困惑。

document.addEventListener("deviceready", onDeviceReady, false);

    // Cordova is ready
    //
    function onDeviceReady() {
      alert('deviceready');
        navigator.geolocation.getCurrentPosition(onSuccess, onError);
    }

    // onSuccess Geolocation
    //
    function onSuccess(position) {
        var element = document.getElementById('geolocation');
        element.innerHTML = 'Latitude: '           + position.coords.latitude              + '<br />' +
                            'Longitude: '          + position.coords.longitude             + '<br />' +
                            'Altitude: '           + position.coords.altitude              + '<br />' +
                            'Accuracy: '           + position.coords.accuracy              + '<br />' +
                            'Altitude Accuracy: '  + position.coords.altitudeAccuracy      + '<br />' +
                            'Heading: '            + position.coords.heading               + '<br />' +
                            'Speed: '              + position.coords.speed                 + '<br />' +
                            'Timestamp: '          +                                   position.timestamp          + '<br />';
    }

    // onError Callback receives a PositionError object
    //
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
                'message: ' + error.message + '\n');
    }

7 个答案:

答案 0 :(得分:17)

  1. 确保您安装了地理位置插件(运行phonegap local plugin add org.apache.cordova.geolocation),并在设备中启用了GPS。

  2. 添加超时并设置enableHighAccuracy:

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

    在某些模拟器中,您需要将enableHighAccuracy设置为false,因此如果仍然无效,请尝试使用。

  3. 如果您使用的是Android模拟器,它不会读取GPS值,因此我们需要通过命令行发送它们。我们需要在运行模拟器的端口中启动一个telnet会话(您可以检查模拟器窗口标题中的端口,开头的数字,在我的情况下为5554):

    telnet localhost 5554
    
  4. 然后运行命令

        geo fix -122.4 37.78
    

    如果您关闭应用程序,则需要重新发送地理位置,因此如果它不起作用,只需在打开应用程序之后立即运行geo fix命令,然后才会触发超时事件。

答案 1 :(得分:5)

实际上它正在运作,但是位置无法在短时间内确定,因此既不会被视为成功也不会失败,因此不会执行任何操作。

这可以通过设置GeoLocation回调的超时来管理

答案 2 :(得分:5)

如果手机功能无法正常工作,请检查是否设置了相应的应用权限。例如,对于互联网访问或Android设备上的地理位置,您的AndroidManifest.xml必须包含以下行:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

答案 3 :(得分:1)

确定。我也很难解决这个问题[这就是我如何到达这个页面]

但它终于奏效了。我刚做了改变:

我改变了这一行:navigator.geolocation.getCurrentPosition(onSuccess,onError);

指向:navigator.geolocation.getCurrentPosition(onSuccess);

现在整个事情都有效。

答案 4 :(得分:0)

问题出在浏览器上。 清除浏览器缓存并再次运行。

src:http://community.phonegap.com/nitobi/topics/geolocation_works_with_one_android_device_but_not_another

答案 5 :(得分:0)

确保您已将javascript包含在正文中而不是html的head部分中。在通过互联网找不到任何线索后,我学到了很难,所以认为最好分享。它对我来说很有魅力,我将javascript代码从

转移到了

答案 6 :(得分:0)

如果您使用的是PhoneGap Desktop,并且无法直接访问AndroidManifest.xml,则解决方案是通过在config.xml中添加“ config-file”元素来添加权限配置。

在项目的config.xml中,添加以下行:

<config-file platform="android" parent="/manifest" mode="merge">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</config-file>    

此外,请确保在config.xml的小部件元素中声明android xml命名空间:

<widget id="com.phonegap.helloworld" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android">

此处有更多详细信息:http://docs.phonegap.com/phonegap-build/configuring/config-file-element/