Phonegap + jquery mobile getLocation

时间:2012-09-06 06:17:20

标签: android jquery mobile cordova geolocation

嗨,基本上我有一个应用程序,需要获得当前位置每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上看到任何异常,我一直试图解决这个问题三天但仍然没有运气,我希望有人对可能存在的问题有所了解,或者我使用的逻辑是否错误。

感谢您的时间。

1 个答案:

答案 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);