Cordova geolocation plugin doesn't work on android

与世无争的帅哥 提交于 2019-12-11 02:02:59

问题


I'm using cordova ,geolocation plugin for showing latitude and longitude on android. There are plenty of question same as this so I read and tried their solution but couldn't fix the problem. The code below works perfectly on browser.

I tried 3 method, first: "navigator.geolocation.watchPosition" which returns wrong result(37.42,-122.08) in emulator(Android Studio) and doesn't return anything in device.

I also tried "navigator.geolocation.getCurrentPosition" with both "enableHighAccuracy" set 'true' and 'false' and I get timeOut error alerted.

When I delete deviceready, I don't get the timeOut, just wrong result from all three methods.

(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);

I get the watchPosition part from another question in stackoverflow. I use cordova version: 6.4.0. I deleted the plugin and tried again but it didn't work. the device I'm testing with is a lenovo tablet. Thanks a lot.

UPDATE: my Geolocation version is: 2.4.0 Is it important???


回答1:


After two days of struggling I turned on "High accuracy" in location settings. The app Works now!!!



来源:https://stackoverflow.com/questions/40375069/cordova-geolocation-plugin-doesnt-work-on-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!