6

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

我在官方网站的文档中找到了这个例子

但是,即使执行了 onDevice 就绪,也不会执行成功或错误函数回调。我对此感到非常困惑。

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');
    }
4

7 回答 7

19
  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
    

然后运行命令

    geo fix -122.4 37.78

如果您关闭应用程序,您需要重新发送地理位置,所以如果它不起作用,只需geo fix在打开应用程序后,在超时事件触发之前运行命令。

于 2014-04-18T11:29:46.910 回答
7

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

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

于 2013-06-01T11:05:56.447 回答
5

当有 phonegap 功能不工作时,请检查应用程序中是否设置了相应的权限。例如,对于互联网访问或 android 设备上的地理定位,您的 AndroidManifest.xml 必须包含以下行:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
于 2014-02-18T08:49:20.853 回答
1

行。我也为这个问题而苦苦挣扎[这就是我到达此页面的方式]

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

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

对此:navigator.geolocation.getCurrentPosition(onSuccess);

整个事情现在都可以了。

于 2013-08-27T14:49:29.373 回答
0

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

源代码:http : //community.phonegap.com/nitobi/topics/geolocation_works_with_one_android_device_but_not_another

于 2013-11-09T01:38:40.853 回答
0

确保您已将 javascript 包含在正文中,而不是包含在 html 的头部部分中。在网上找不到任何线索后,我很难学会它,所以认为最好分享一下。它尽快对我来说就像魅力一样,我将javascript代码从

于 2014-04-02T18:33:44.110 回答
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/

于 2019-04-13T12:33:03.290 回答