navigator.geolocation.getCurrentPosition doesn't work on android google chrome

匿名 (未验证) 提交于 2019-12-03 01:47:02

问题:

This code:

navigator.geolocation.getCurrentPosition(                     function(position) {                         alert(position.coords.latitude, position.coords.longitude);                     },                     function(error){                         alert(error.message);                     }, {                         enableHighAccuracy: true                         ,timeout : 5000                     }             ); 

http://jsfiddle.net/FcRpM/ works in Google Chrome at my laptop, but on mobile HTC one S (android 4.1, GPS off, location via mobile networks and wifi enabled), connected to internet via WiFi.

  1. Default browser works fine.
  2. Google Chrome, Opera, Yandex.browser for android fails with "Timeout expired".

other android apps locates me correct.

回答1:

You can try this. It seems to work on my device (Samsung Galaxy Nexus running Chrome 27.0.1453.90 on Wi-Fi (no data connection, no GPS on))

navigator.geolocation.getCurrentPosition(     function(position) {          alert("Lat: " + position.coords.latitude + "\nLon: " + position.coords.longitude);     },     function(error){          alert(error.message);     }, {          enableHighAccuracy: true               ,timeout : 5000     } ); 

The problem is that alert only takes strings (in it's original form) however you are passing 2 doubles. Modify the alert box for example to alert('Hey', 'Hello'); and the output will be only Hey. Change the , to + and you'll get the concatenated strings HeyHello. You can't use a + sign inside the alert as the equation will be first executed and then displayed.

Hope this makes it clear.



回答2:

THERE IS A WORKAROUND: to watchPosition call, and wrapping this in a 5 second wait before clearing the watchID. Code below;

var options = { enableHighAccuracy: true, maximumAge: 100, timeout: 60000 }; if( navigator.geolocation) {    var watchID = navigator.geolocation.watchPosition( gotPos, gotErr, options );    var timeout = setTimeout( function() { navigator.geolocation.clearWatch( watchID ); }, 5000 ); } else {    gotErr(); } 

I haven't played around with the "options" values or the timeout delay at the moment, but the above code brings back accurate positioning info on every platform I've tried.



回答3:

Just finished testing a bunch of mobile devices and the Javascript Geolocation. I used the example code from Google in order to make sure that the problem is not in my own code.

Chrome for Android 4.4 does not seem to work with GPS-only location services and neither does the 2.3 stock browser. They both need "High accuracy" - the use of wireless and 3G/4G networks.

The funny thing is that Firefox for Android works without any problems GPS-only. Only the stock Android browsers (Chrome + Mobile Safari) fail with GPS-only location settings.

And the rest of the gang - Lumia WP8 with GPS, Windows and Linux (both with ADSL) worked perfectly with any location settings.



回答4:

After many hours of seeking solution for error3, i only can reboot my phone, and geolocation starts work as usually. So bad...



回答5:

just add

"geolocation",
"location"

under permissions. Worked for me. :-)



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