Ti.Geolocation回调仅在运行KitchenSink时有效

时间:2012-08-30 14:11:27

标签: gps titanium appcelerator titanium-mobile appcelerator-mobile

我有Ti.Geolocation的问题让我发疯。目前只使用IOS平台。我的目标是在手机移动时以最高的准确度获得GPS回调。

问题是我从KitchenSink中复制了geolocation.js中的大部分代码,相关部分如下所示。它看起来不错,但我得到的行为非常奇怪。

当我四处走动时,我只是没有定期进行GPS回调!罗盘工作正常,并一直向我发送回调。我也试过没有订阅'标题'事件,但没有改变GPS行为。

只有一个事件可以触发具有正确数据的GPS回调,并且正在运行KitchenSink!切换到KitchenSink并返回也给我一个精确度在5到10之间的回调。如果我不这样做,我的准确度可以高达1500-2500(如果我得到一个回调,那就是)。

KitchenSink似乎工作正常,但我没看到那个应用程序做了什么,我没有?!

我已经关闭了手机中的Wifi,所以它不会打扰。这个问题非常令人沮丧,我现在花了三天时间,有人可以帮忙吗?我也尝试过编译不同的SDK(通常是2.1.1GA,但也低到1.8.2)。没有变化。

if (locationServicesAvailable()) {
    // APPLICATION LOGIC
    ui.init();

    Ti.Geolocation.purpose = "Get Lat/Long of your current position";
    Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST;

    Ti.Geolocation.distanceFilter = 10;
    Ti.Geolocation.frequency = 0; /* as fast as possible */
    Ti.Geolocation.preferredProvider = Ti.Geolocation.PROVIDER_GPS;

    if (Ti.Geolocation.hasCompass) {
        //  TURN OFF ANNOYING COMPASS INTERFERENCE MESSAGE
        Ti.Geolocation.showCalibration = false;
        // SET THE HEADING FILTER (THIS IS IN DEGREES OF ANGLE CHANGE)
        // EVENT WON'T FIRE UNLESS ANGLE CHANGE EXCEEDS THIS VALUE
        Ti.Geolocation.headingFilter = 45;
        /*
        Ti.Geolocation.getCurrentHeading(handleCompass);
        Ti.Geolocation.addEventListener('heading', handleCompass);
        */
    }

    Ti.Geolocation.getCurrentPosition(handlePosition);
    Ti.Geolocation.addEventListener('location', handlePosition);

    ui.refresh.addEventListener('click', function(e) {
        Ti.Geolocation.getCurrentPosition(handlePosition);  
    });
}

1 个答案:

答案 0 :(得分:0)

好吧,好像我找到了问题的答案。它就像设置Ti.Geolocation.ACCURACY_NEAREST_TEN_METERS的精度一样简单。我正在使用IOS平台,如果重要的话,我位于瑞典(在乡下)。不知道这个解决方案是否适用于所有人,但我已经看到了对这个问题的引用(http://developer.appcelerator.com/question/130596/strange-behavior-of-the-gps)和解决方案所以我知道它存在。

不知道为什么ACCURACY_BEST不起作用,但它不适合我。当我得到时间时,我也会测试所有其他设置但现在至少我可以继续开发。