android上的javascript地理定位在离线模式下不起作用

Posted

技术标签:

【中文标题】android上的javascript地理定位在离线模式下不起作用【英文标题】:javascript geolocation on android doesn't work on offline mode 【发布时间】:2012-12-04 12:37:15 【问题描述】:

您好,我想知道是否可以在没有互联网连接的情况下捕获地理位置。假设我没有连接到网络,但我有我的 Gps,是吗

navigator.geolocation.getCurrentPosition(successCallback, errorCallback,
  
    enableHighAccuracy : true,
    timeout : 10000, // 10s
    maximumAge : 0
   

在这种情况下工作

【问题讨论】:

你尝试的时候发生了什么? 它正在检索在线捕获的相同位置 【参考方案1】:

当我开发我的 phonegap 应用程序(在 android 上)时,我发现使用 enableHighAccuracy 并不总是返回准确的位置,有时操作系统会返回一个精度为 100 米的低精度位置,我假设使用网络三角测量或互联网连接以确定位置。

此外,如果您在应用运行时丢失 GPS 定位,操作系统有时会返回不准确的位置。 AFAIK 无法判断返回给successCallback() 的位置是通过哪种方法获得的,但我通过检查返回给successCallback() 的响应对象中的精度值推断出这一点:我设置了50 米的最低要求精度;如果返回的位置不如这个准确,我会忽略它们。

试用此测试用例,看看您的设备返回的准确度如何。由于 navigator.geolocation.getCurrentPosition() 只返回一次您的位置,我使用的是 navigator.geolocation.watchPosition()。希望这会有所帮助!

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Geolocation test</title>

<script type="text/javascript" src="phonegap.js"></script>
<script type="text/javascript" src ="jquery-1.7.1.min.js"></script>

<script type="text/javascript" >    
    $(document).on("deviceready", function() 
        var minimumAccuracy = 50; // Minimum accuracy in metres to accept as a reliable position

        function successCallback(position)
            $('#error').html('');
            $('#lat').html(position.coords.latitude);
            $('#lon').html(position.coords.longitude);
            $('#accuracy').html(position.coords.accuracy);
            $('#accurate').html(position.coords.accuracy > minimumAccuracy ? "true" : "false");

        

        function errorCallback(error)
            $('#lat').html(''); $('#lon').html(''); $('#accuracy').html(''); $('#accurate').html('');
            $('#error').html("Error while retrieving current position. <br/>Error code: " + error.code + "<br/>Message: " + error.message);
        

        navigator.geolocation.watchPosition(successCallback, errorCallback, 
            enableHighAccuracy: true,
            timeout: 10000,
            maximumAge: 0

        );
    );

</script>
</head>
<body>
<p>Latitude: <span id="lat"></span></p>
<p>Longitude: <span id="lon"></span></p>
<p>Accuracy: <span id="accuracy"></span></p>
<p>Accurate?: <span id="accurate"></span></p>
<hr/>
<p>Error: <span id="error"></span></p>
</body>
</html>

【讨论】:

【参考方案2】:

对于 Android 应用程序,您可以使用可从http://www.offlinegeolocation.com 下载的 Android 库 - 它是免费的,但非常大(全球 240 MB,仅限英国 10 Mb)。它使用已知的蜂窝塔位置,并将其与检测到的附近蜂窝塔进行比较。它不如 GPS 或在线地理定位准确,但可能适合您作为故障转移的需求。

为了在 Phonegap 中使用它,需要将其转换为 Phonegap 插件。这里有一个很好的教程:http://devgirl.org/2013/07/17/tutorial-how-to-write-a-phonegap-plugin-for-android/

【讨论】:

以上是关于android上的javascript地理定位在离线模式下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥标题在带有 chrome 的 android 上的地理定位中保持“空”

Javascript地理定位不适用于更新的android chrome

Android手机上的错误“无法启动地理定位服务代码:2”

为移动 Chrome 上的本地文件启用地理定位

Javascript 地理位置 - GPS 设置 - FINE 与 COARSE

地理定位不适用于webview android