Phonegap Geolocation不工作

Sol*_*ong 6 android geolocation cordova

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

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

但是,即使执行了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');
    }
Run Code Online (Sandbox Code Playgroud)

Jes*_*era 17

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

  2. 添加超时并设置enableHighAccuracy:

    navigator.geolocation.getCurrentPosition(onSuccess, onError, {timeout: 10000, enableHighAccuracy: true});
    
    Run Code Online (Sandbox Code Playgroud)

    在某些模拟器中,您需要将enableHighAccuracy设置为false,因此如果仍然不起作用请尝试.

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

    telnet localhost 5554
    
    Run Code Online (Sandbox Code Playgroud)

然后运行命令

    geo fix -122.4 37.78
Run Code Online (Sandbox Code Playgroud)

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


Sol*_*ong 6

实际上它正在工作,但是位置不能在短时间内确定,因此既不能被视为成功也不能失败,因此不会执行任何动作.

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


Kar*_*arl 5

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

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)