navigator.geolocation.getCurrentPosition不适用于Android谷歌浏览器

时间:2013-06-27 16:22:23

标签: javascript android html5 google-chrome geolocation

此代码:

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

https://jsfiddle.net/FcRpM/适用于我的笔记本电脑的谷歌浏览器,但在移动HTC one S(安卓4.1,GPS关闭,通过移动网络和启用wifi的位置),通过WiFi连接到互联网。

  1. 默认浏览器工作正常。
  2. Google Chrome,Opera,Yandex.browser for android因“超时已过期”而失败。
  3. 其他Android应用程序找到我正确的。

7 个答案:

答案 0 :(得分:18)

你可以试试这个。它似乎可以在我的设备上运行(三星Galaxy Nexus在Wi-Fi上运行Chrome 27.0.1453.90(没有数据连接,没有GPS))

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

问题是警报只接受字符串(以原始形式),但是你传递了2个双打。例如,将警告框修改为alert('Hey', 'Hello');,输出将仅为Hey。将,更改为+,您将获得连接字符串HeyHello。您无法在+内使用alert符号,因为公式将首先执行然后显示。

希望这说清楚。

答案 1 :(得分:8)

有一个替代方法:to watchPosition调用,并在清除watchID之前等待5秒钟。代码如下;

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

我目前还没有使用“选项”值或超时延迟,但上面的代码在我尝试的每个平台上都会返回准确的定位信息。

答案 2 :(得分:6)

刚刚完成测试一堆移动设备和Javascript Geolocation。我使用了Google的示例代码,以确保问题不在我自己的代码中。

Chrome for Android 4.4似乎不适用于仅限GPS的定位服务,2.3版本的浏览器也不适用。它们都需要“高精度” - 使用无线和3G / 4G网络。

有趣的是,Firefox for Android可以毫无问题地使用GPS。 只有现有的Android浏览器(Chrome + Mobile Safari)才能使用仅限GPS的位置设置

其他人--Lumia WP8配备GPS,Windows和Linux(均配有ADSL),可与任何位置设置完美配合。

答案 3 :(得分:2)

经过几个小时寻找error3的解决方案,我只能重新启动手机,地理位置通常会开始工作。太糟糕了......

答案 4 :(得分:2)

好吧,我昨天遇到了这个问题,问题是Geolocation API只能通过HTTPS使用。它可以在http://localhost上运行,但对于其他设备,您需要处于安全连接状态。

希望它有所帮助!

答案 5 :(得分:1)

它对我来说适用于所有模拟器,但不适用于android设备

对我有用的是

navigator.geolocation.getCurrentPosition(
                (position) => {
                    console.log(position);
                },
                (error) => console.log(new Date(), error),
                { enableHighAccuracy: false, timeout: 5000},
            );

意味着不是三个参数,我只使用了两种方法

  

{enableHighAccuracy:false,超时:5000}

答案 6 :(得分:-5)

只需添加

" geolocation",
"位置"

权限下。为我工作。 : - )