我正在开发一个应用程序来跟踪我的手机定期(不仅是第一次) with navigator.geolocation.getCurrentPosition()
运行在 HTML5 页面中,运行在 webkit webview 中,运行在 android 2.1 应用程序中。
我已经阅读了对以下问题的答复:
在 Android 2.0+ 上的 WebView 中使用 navigator.geolocation.getCurrentPosition(PhoneGap 相关) https://stackoverflow.com/questions/2267513/using-navigator-geolocation-getcurrentposition-in-webview-on-android-2-0-phone
Android:使用 html5 通过 javascript api 确定 webview 中的地理位置 https://stackoverflow.com/questions/2390641/android-using-html5-to-determine-geolocation-in-webview-with-javascript-api
无法在 webview 上加载地理位置 https://stackoverflow.com/questions/5845760/geolocation-cannot-be-load-on-webview
Android WebView 使用 GeolocationPermissions https://stackoverflow.com/questions/6921094/android-webview-using-geolocationpermissions
我设法通过javascript方法获取位置navigator.geolocation.getCurrentPosition()
,即使精度非常差(1421 米)。
但真正的问题是:如果我打电话给getCurrentPosition()
方法不止一次,它总是返回相同的位置并且总是具有相同的差精度(1421米)。似乎发生了以下两种情况之一:
-
该设备不会从 GPS 传感器获取位置(精度较高),但会通过 AGPS(从 3g 蜂窝)获取位置,从而返回相同的位置和精度。 GPS 传感器显然已打开,并且我已在清单文件中设置了正确的权限:
<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" />
设备在调用“getCurrentPosition”后正确获取了第一个位置,但下次调用此方法时,该位置是从某些“GPS 缓存”返回的,并且该位置并不是真正从 GPS 传感器获取的。
有没有人成功地通过getCurrentPosition()
HTML5 JavaScript 方法?
我发现手机(至少 iPhone)通常需要三次检查才能获得准确的读数,几乎就像它们在对位置进行三角测量一样。正如您所发现的,问题在于每个新的调用getCurrentPosition()
似乎是“盲目”启动的,因此它不会变得更准确(当您在台式机/笔记本电脑上运行此功能时,结果会有所不同)。
解决办法是geolocation.watchPosition()
。该函数使用之前的调用来提高准确性。大约五秒钟后,它就达到了预期的准确度(如果你没有移动),所以你停止检查。此外,只要它认为不会变得更加准确,它就会停止检查。使用window.setTimeout()
来控制间隔。
Demo: http://jsfiddle.net/ThinkingStiff/yn3Bq/ http://jsfiddle.net/ThinkingStiff/yn3Bq/
HTML:
<div id="result"></div>
Script:
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
);
Output:
纬度:35.5830119,液化天然气:-124.4871223,精度:40
纬度:35.5829974,液化天然气:-124.4871525,精度:30
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)