gpt4 book ai didi

android - 如何定期更新 WebView 中的 HTML5 位置(使用 FINE_ACCURACY)

转载 作者:太空狗 更新时间:2023-10-29 13:38:15 25 4
gpt4 key购买 nike

我正在开发一个应用程序来定期(不仅是第一次)跟踪我的手机,navigator.geolocation.getCurrentPosition() 在 HTML5 页面中运行在 android 2.1 应用程序中运行的 webkit webview 中运行。

我已经阅读了以下问题的回复:

Using navigator.geolocation.getCurrentPosition in WebView on Android 2.0+ (PhoneGap related)
Android: Using html5 to determine geolocation in webview with javascript api
Geolocation cannot be load on webview
Android WebView using GeolocationPermissions

我设法通过 javascript 方法 navigator.geolocation.getCurrentPosition() 获得了位置,即使精度非常差(1421 米)。

但真正的问题是:如果我多次调用 getCurrentPosition() 方法,它总是返回相同的位置并且总是以相同的错误精度(1421 米)返回给我。似乎发生了这两种情况之一:

  1. 设备不会从 GPS 传感器获取位置(精确度很高),而是通过 AGPS(从 3g 单元)获取位置,从而导致返回相同的位置和精度。 GPS 传感器显然已打开,我在 list 文件中设置了正确的权限:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  2. 设备在调用“getCurrentPosition”后正确获得了第一个位置,但下次调用此方法时,该位置是从某个“GPS 缓存”返回的,而不是真正从 GPS 传感器获得的位置。

有没有人通过 getCurrentPosition() HTML5 Javascript 方法成功地定期更新位置?

最佳答案

我发现手机(至少是 iPhone)通常需要进行三次检查才能获得准确的读数,就好像它们在三角测量位置一样。正如您所发现的那样,问题是每次对 getCurrentPosition() 的新调用似乎都是“盲目”开始的,因此它不会变得更准确(运行此函数时结果会有所不同在台式机/笔记本电脑上)。

解决方案是geolocation.watchPosition()。该函数使用以前的调用来提高准确性。大约五秒钟后,它会达到预期的准确度(如果你不动的话),所以你停止检查。此外,它会在它认为不会变得更准确的任何时候停止检查。使用 window.setTimeout() 来控制时间间隔。

演示:http://jsfiddle.net/ThinkingStiff/yn3Bq/

HTML:

<div id="result"></div>

脚本:

var latitude, longitude, accuracy;

function setGeolocation() {
var geolocation = window.navigator.geolocation.watchPosition(
function ( position ) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
accuracy = position.coords.accuracy;
document.getElementById( 'result' ).innerHTML +=
'lat: ' + latitude + ', '
+ 'lng: ' + longitude + ', '
+ 'accuracy: ' + accuracy + '<br />';
}, function () {
/*error*/
}, {
maximumAge: 250,
enableHighAccuracy: true
}
);
window.setTimeout( function () {
window.navigator.geolocation.clearWatch( geolocation )
},
5000 //stop checking after 5 seconds
);
};

setGeolocation();

window.setTimeout( function () {
setGeolocation();
},
30000 //check every 30 seconds
);

输出:

纬度:35.5830119,经度:-124.4871223,精度:40
纬度:35.5829974,经度:-124.4871525,精度:30

关于android - 如何定期更新 WebView 中的 HTML5 位置(使用 FINE_ACCURACY),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8552186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com