Cordova 3.1 and Phone Gap Geolocation fails with “

2019-09-03 02:17发布

Steps to reproduce..

cordova create hello4 com.example.hello HelloWorld
cd hello4
cordova platform add android
cordova plugin add org.apache.cordova.geolocation

Replace index.html with the full example from here: http://docs.phonegap.com/en/3.1.0/cordova_geolocation_geolocation.md.html#Geolocation

add this to config.xml

<feature name="Geolocation">
    <param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" />
</feature>

then..

cordova build android
cordova run android

This produces the error: Code 3 Position retrieval timed out.

I have also tried with the Phone Gap online builder to no avail. Does anyone know how to fix this?

Many thanks

2条回答
时光不老,我们不散
2楼-- · 2019-09-03 03:00

I can confirm that issue. I never get a GPS fix (Error Code 3, Position retrieval timed out) using this code from example:

<!DOCTYPE html>
<html>
<head>
    <title>Device Properties Example</title>

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // device APIs are available
    //
    function onDeviceReady() {
        navigator.geolocation.getCurrentPosition(onSuccess, onError, { timeout: 30000, enableHighAccuracy: true });
    }

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

</script>
</head>
<body>
<p id="geolocation">Finding geolocation...</p>
</body>
</html>

However, in the genymotion emulator, where you can simulate a GPS device on an arbitrary position, it works just fine!

enter image description here

Anyone with a solution here? I'm using a HTC One X device with Android 4.1.1. GPS is enabled and works on other apps.

查看更多
forever°为你锁心
3楼-- · 2019-09-03 03:19

I'm seeing the same issue with Phonegap v3.1.0 but not with v2.9.0 - see my answer to this question:

Yes, you're right, there appears to be a problem with geolocation in Phonegap v3.x - I have 3.1.0-0.15.0 installed. I'm seeing the same: a single correct position, then a timeout error, triggering the clear/re-add of the watcher, followed by a correct position. Running the same test app on Phonegap 2.9.0, it works fine, successfully retrieving positions. This time I used the options { maximumAge: 0, timeout: 30000, enableHighAccuracy: true };

See if you get the same results: here's the v3.1.0 project&APK and here's the v2.9.0 project&APK.

Here's the logcat when I built it with Phonegap 3.1.0:

10-24 20:50:29.287: I/Web Console(17092): Device Ready at :1171167449
10-24 20:50:59.287: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out.
at :1171167509
10-24 20:51:29.328: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out.
at :1171167509
10-24 20:51:59.337: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out.
at :1171167445
10-24 20:52:28.397: I/Web Console(17092): Position updated: latitude=50.64626501666667, longitude=-4.736916616666666, accuracy=17m
at :-1468095491
10-24 20:52:28.397: I/Web Console(17092): Position updated: latitude=50.64626501666667, longitude=-4.736916616666666, accuracy=17m
at :-1468095491
10-24 20:52:58.407: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out.
at :1171167445
10-24 20:53:27.878: I/Web Console(17092): Position updated: latitude=50.646433849999994, longitude=-4.736890766666666, accuracy=8m
at :-1468095491
10-24 20:53:27.878: I/Web Console(17092): Position updated: latitude=50.646433849999994, longitude=-4.736890766666666, accuracy=8m
at :-1468095491
10-24 20:53:57.887: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out.
at :1171167445
10-24 20:54:27.367: I/Web Console(17092): Position updated: latitude=50.64643435, longitude=-4.736896850000001, accuracy=9m at
:-1468095491
10-24 20:54:27.367: I/Web Console(17092): Position updated: latitude=50.64643435, longitude=-4.736896850000001, accuracy=9m at
:-1468095491
10-24 20:54:57.377: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out.
at :1171167445

And here's the logcat from exactly the same app when I built it using Phonegap v2.9.0:

10-24 21:10:19.698: I/Web Console(19755): Device Ready at :1172318425
10-24 21:10:22.487: I/Web Console(19755): Position update rejected because accuracy of45m is less than required 20m at :1172318349
10-24 21:10:54.697: I/Web Console(19755): Position updated: latitude=50.646209633333335, longitude=-4.737049566666667, accuracy=9m
at :1172318421
10-24 21:10:55.177: I/Web Console(19755): Position updated: latitude=50.64623646666667, longitude=-4.7369963, accuracy=9m at
:1172318421
10-24 21:10:56.177: I/Web Console(19755): Position updated: latitude=50.64623674999999, longitude=-4.736949983333333, accuracy=9m
at :1172318357
10-24 21:10:57.677: I/Web Console(19755): Position updated: latitude=50.646237033333335, longitude=-4.73695015, accuracy=9m at
:1172318357
10-24 21:10:58.677: I/Web Console(19755): Position updated: latitude=50.646238333333336, longitude=-4.736944716666667, accuracy=9m
at :1172318357
10-24 21:10:59.747: I/Web Console(19755): Position updated: latitude=50.6462348, longitude=-4.736952216666666, accuracy=9m at
:1172318357
10-24 21:11:00.667: I/Web Console(19755): Position updated: latitude=50.64623206666667, longitude=-4.73695695, accuracy=9m at
:1172318357
10-24 21:11:01.677: I/Web Console(19755): Position updated: latitude=50.646232700000006, longitude=-4.7369544999999995,
accuracy=9m at :1172318357
10-24 21:11:02.677: I/Web Console(19755): Position updated: latitude=50.646232700000006, longitude=-4.7369544999999995,
accuracy=12m at :1172318357
10-24 21:11:03.687: I/Web Console(19755): Position updated: latitude=50.64623241666666, longitude=-4.736952116666667, accuracy=12m
at :1172318357
10-24 21:11:04.207: I/Web Console(19755): Position updated: latitude=50.646240533333334, longitude=-4.736951266666667,
accuracy=12m at :1172318357
10-24 21:11:05.187: I/Web Console(19755): Position updated: latitude=50.646235399999995, longitude=-4.736953183333334,
accuracy=12m at :1172318357
10-24 21:11:06.197: I/Web Console(19755): Position updated: latitude=50.6462522, longitude=-4.736926933333334, accuracy=12m at
:1172318357
10-24 21:11:07.197: I/Web Console(19755): Position updated: latitude=50.646253949999995, longitude=-4.736931416666667,
accuracy=12m at :1172318357
10-24 21:11:07.517: I/Web Console(19755): Position update rejected because accuracy of45m is less than required 20m at :1172318357
10-24 21:11:08.197: I/Web Console(19755): Position updated: latitude=50.64624196666667, longitude=-4.736951366666666, accuracy=9m
at :1172318357
10-24 21:11:09.697: I/Web Console(19755): Position updated: latitude=50.646261833333334, longitude=-4.73694825, accuracy=9m at
:1172318357
10-24 21:11:10.697: I/Web Console(19755): Position updated: latitude=50.64627816666666, longitude=-4.736968816666666, accuracy=9m
at :1172318357
10-24 21:11:11.197: I/Web Console(19755): Position updated: latitude=50.64627698333334, longitude=-4.736982066666667, accuracy=9m
at :1172318357
10-24 21:11:12.197: I/Web Console(19755): Position updated: latitude=50.646291033333334, longitude=-4.736992866666667, accuracy=9m
at :1172318357
10-24 21:11:13.197: I/Web Console(19755): Position updated: latitude=50.646285549999995, longitude=-4.73696835, accuracy=9m at
:1172318357
10-24 21:11:14.197: I/Web Console(19755): Position updated: latitude=50.64628801666666, longitude=-4.736988766666667, accuracy=9m
at :1172318357
10-24 21:11:15.197: I/Web Console(19755): Position updated: latitude=50.646256433333335, longitude=-4.736974683333333, accuracy=9m
at :1172318357
10-24 21:11:16.197: I/Web Console(19755): Position updated: latitude=50.64623895, longitude=-4.736980716666666, accuracy=9m at
:1172318357
10-24 21:11:17.207: I/Web Console(19755): Position updated: latitude=50.646249616666665, longitude=-4.736948533333333, accuracy=9m
at :1172318357
10-24 21:11:18.207: I/Web Console(19755): Position updated: latitude=50.64624111666667, longitude=-4.7369412833333335, accuracy=9m
at :1172318357
10-24 21:11:19.217: I/Web Console(19755): Position updated: latitude=50.64624506666667, longitude=-4.7369719, accuracy=9m at
:1172318357
10-24 21:11:20.207: I/Web Console(19755): Position updated: latitude=50.646218950000005, longitude=-4.7369769999999995,
accuracy=9m at :1172318357
10-24 21:11:21.207: I/Web Console(19755): Position updated: latitude=50.64621395000001, longitude=-4.7369834, accuracy=9m at
:1172318357
10-24 21:11:22.207: I/Web Console(19755): Position updated: latitude=50.646217416666666, longitude=-4.736986783333333,
accuracy=12m at :1172318357
10-24 21:11:23.207: I/Web Console(19755): Position updated: latitude=50.646211816666664, longitude=-4.7369768500000005,
accuracy=12m at :1172318357
10-24 21:11:24.707: I/Web Console(19755): Position updated: latitude=50.646210450000005, longitude=-4.736994233333333,
accuracy=12m at :1172318357
10-24 21:11:25.707: I/Web Console(19755): Position updated: latitude=50.64621571666667, longitude=-4.736988583333333, accuracy=12m
at :1172318357
10-24 21:11:26.707: I/Web Console(19755): Position updated: latitude=50.646216466666665, longitude=-4.7370037, accuracy=12m at
:1172318357
10-24 21:11:27.707: I/Web Console(19755): Position updated: latitude=50.64621723333333, longitude=-4.737019266666667, accuracy=20m
at :1172318357
10-24 21:11:28.717: I/Web Console(19755): Position updated: latitude=50.64621738333334, longitude=-4.737011333333333, accuracy=12m
at :1172318357
10-24 21:11:29.717: I/Web Console(19755): Position updated: latitude=50.64621768333333, longitude=-4.7370187, accuracy=18m at
:1172318357
10-24 21:11:30.727: I/Web Console(19755): Position updated: latitude=50.64621798333333, longitude=-4.737026116666667, accuracy=18m
at :1172318357
查看更多
登录 后发表回答