在Android模拟器中无法获取地理位置信息

3

我正在制作一个小型的样例应用程序,当我点击按钮时,在弹出窗口中显示纬度和经度。

以下是我的代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>BlankCordovaApp1</title>

    <link href="css/index.css" rel="stylesheet" />

    <script src="cordova.js"></script>
    <script src="scripts/platformOverrides.js"></script>
    <script src="scripts/index.js"></script>

    <script type="text/javascript" charset="utf-8">
        var alertmsg = function (position) {
            var msg = 'Latitude: ' + position.coords.latitude + '<br />' +
                'Longitude: ' + position.coords.longitude + '<br />'
            navigator.notification.alert(msg);
        }
        function geoLocation() {
            navigator.geolocation.getCurrentPosition(alertmsg)
        }
    </script>
</head>
<body>
    <input type="button" id="btnClick" onclick="geoLocation()" value="click" />
</body>
</html>

在Ripple模拟器中可以工作, 但是在Android模拟器和Genymotion中不能工作。


1
在 Android 模拟器中无法获取地理位置信息,请使用真实设备。 - Aravin
有一种通过telenet来修复Android模拟器中的地理位置的方法,但对我来说也没有起作用。那么Genymotion呢?我们能在其中获取地理位置吗?另外,我们能否直接将bin\android\debug\App2-debug-unaligned.apk安装到设备上?(我无法测试它,因为我现在没有Android设备) - mahindar
2个回答

1
我正在使用基于Backbone的智能手机应用程序和Visual Studio 13,这很麻烦。添加超时选项和enableHighAccuracy总是会触发onError处理程序,如果没有这些选项,就不会返回任何内容。
因此,这是一个很好的答案:
//Android Emulator safe version
function getGpsCordinates(callback) {
    if ("geolocation" in navigator) {                  
        navigator.geolocation.getCurrentPosition(
            //Success
            function (position) {
                console.log("GPS: Success");
                callback(position);
            },
            //Error
            function (error) {
                console.log("GPS: Error");
                var position = {
                  coords: {
                      longitude: 0,
                      latitude: 0,
                      speed: 0
                  }
              };
              callback(position);
            },
            { timeout: 7000, enableHighAccuracy: true });
    } else {
        var position = {
            coords: {
                longitude: 0,
                latitude: 0,
                speed: 0
            }
        };
        console.log("GPS: Not Supported");
        callback(position);
    }
    console.log("GPS: Continued");
}

getGpsCordinates(function(mycallback) {
  alert(mycallback.coords.latitude);
});

Code Pen版本


1
我找到了问题所在。如果使用这段代码,它就能正常工作。
navigator.geolocation.getCurrentPosition(alertmsg, onError, { timeout: 30000, enableHighAccuracy: true });

它在所有模拟器中都可以运行(Ripple、Android、Genymotion)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接