嗨,基本上我有一个应用程序,需要获得当前位置每150秒,我使用中文平板电脑与Android 2.3,它没有gps ,我只使用手机网络。 我一直在设备功能中使用这段代码来获取当前位置:
setInterval(
function(){
if (navigator.network.connection.type != Connection.NONE && navigator.geolocation) {
watchID = navigator.geolocation.getCurrentPosition(
function(position){
plat = position.coords.latitude;
plon = position.coords.longitude;
console.log('location success');
if(map != null){
map.setView({center: new Microsoft.Maps.Location(plat,plon) });
pintaxi.setLocation(new Microsoft.Maps.Location(plat,plon));
}
count++;
if(count == 4){
count = 0;
console.log('Send data');
$.post("http://m2media.mx/plataforma/setpos.php", {latitud: plat, longitud: plon, referencia: 'DEV-008'});
}
},
displayError,
{ timeout: 30000 });
}
else{
if(watchID != null) navigator.geolocation.clearWatch(watchID);
console.log('No connection, fail');
}
}, 60000
);
这是最重要的,这个应用程序的活动在启动时运行,所以我有这样的bootupreceiver:
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, SmarttaxiActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
问题是getCurrent位置总是抛出超时异常,首先当应用程序启动时是启用3g之前大约10到20秒的间隔,但即使在 3g之后也是如此启用它仍然会给我一个超时异常,在应用程序中我有其他功能,使用互联网连接,如twitter小部件,他们运行没有问题。
问题是,如果我在启动位置功能后手动运行应用程序效果非常好。 我没有在logcat上看到任何异常,我一直试图解决这个问题三天但仍然没有运气,我希望有人对可能存在的问题有所了解,或者我使用的逻辑是否错误。
感谢您的时间。
答案 0 :(得分:0)
你试过 navigator.geolocation.watchPosition 和 navigator.geolocation.clearWatch ..?
navigator.geolocation.watchPosition(success_callback_function,error_callback_function,position_options)
navigator.geolocation.clearWatch(watch_position_id)
这里好的是示例
var wpid = navigator.geolocation.watchPosition(geo_success, geo_error, {enableHighAccuracy:true, maximumAge:30000, timeout:27000});
function geo_success (position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
//--- your code --
}
function geo_error(err) {
console.log(err);
}
清除watchPosition ...
navigator.geolocation.clearWatch(wpid);