Cordova地理定位插件不适用于Android

时间:2016-11-02 08:07:50

标签: javascript cordova geolocation

我使用cordova,geolocation插件在android上显示经度和纬度。有很多问题与此相同所以我阅读并尝试了他们的解决方案,但无法解决问题。以下代码在浏览器上完美运行。

我尝试了3种方法,首先:" navigator.geolocation.watchPosition"它在模拟器(Android Studio)中返回错误的结果(37.42,-122.08),并且不会在设备中返回任何内容。

我也试过" navigator.geolocation.getCurrentPosition"同时使用" enableHighAccuracy"设置' true'并且' false'我得到timeOut错误警告。

当我删除deviceready时,我没有得到timeOut,只是错误的结果来自这三种方法。



(function (window) {
  document.addEventListener("deviceready", onDeviceReady, false);
  function onDeviceReady() {
      
    var minAccuracyInMetres = 50;
    var positionWatcher;

    positionWatcher = navigator.geolocation.watchPosition(
      geolocationSuccess2,
      geolocationError2,
      { maximumAge: 0, timeout: 100000, enableHighAccuracy: true });

    function geolocationSuccess2(position) {
        // Reject if accuracy is not sufficient
        if (position.coords.accuracy > minAccuracyInMetres) {
            return;
        }

        // Only single position required so clear watcher
        navigator.geolocation.clearWatch(positionWatcher);

        alert('Latitude: ' + position.coords.latitude + '\n' +
                'Longitude: ' + position.coords.longitude + '\n' +
                'Altitude: ' + position.coords.altitude + '\n' +
                'Accuracy: ' + position.coords.accuracy + '\n' +
                'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
                'Heading: ' + position.coords.heading + '\n' +
                'Speed: ' + position.coords.speed + '\n' +
                'Timestamp: ' + position.timestamp + '\n');
    };

    function geolocationError2(error) {
        console.warn("Error while retrieving current position. " +
          "Error code: " + error.code + ",Message: " + error.message);
    }

    //2

    var onSuccess1 = function (position) {
        alert('Latitude: ' + position.coords.latitude + '\n' +
              'Longitude: ' + position.coords.longitude + '\n' +
              'Altitude: ' + position.coords.altitude + '\n' +
              'Accuracy: ' + position.coords.accuracy + '\n' +
              'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
              'Heading: ' + position.coords.heading + '\n' +
              'Speed: ' + position.coords.speed + '\n' +
              'Timestamp: ' + position.timestamp + '\n');
    };

    function onError1(error) {
        alert('code: ' + error.code + '\n' +
              'message: ' + error.message + '\n' + 'highaccuracy: true');
    }
    var options1 = { maximumAge: 0, timeout: 300000, enableHighAccuracy: true };
    navigator.geolocation.getCurrentPosition(onSuccess1, onError1, options1);
    //3
    var onSuccess = function (position) {
        alert('Latitude: ' + position.coords.latitude + '\n' +
              'Longitude: ' + position.coords.longitude + '\n')
    };

    function onError(error) {
        alert('code: ' + error.code + '\n' +
              'message: ' + error.message + '\n' + ' high accuracy:false');
    }

    navigator.geolocation.getCurrentPosition(onSuccess, onError, { enableHighAccuracy: false, timeout: 300 * 1000, maximumAge: 0 });
 }
})(window);




我从stackoverflow中的另一个问题中获取了watchPosition部分。 我使用cordova版本:6.4.0。 我删除了插件并再次尝试,但它没有工作。 我正在测试的设备是联想平板电脑。 非常感谢。

更新:我的地理位置版本是:2.4.0重要吗???

1 个答案:

答案 0 :(得分:0)

经过两天的挣扎,我在位置设置中打开了“高精度”。该应用程序现在工作!!!