如何中断getCurrentLocation方法(Codename One Location Manager)?

时间:2017-01-19 20:56:00

标签: geolocation codenameone

我的应用程序有一张地图,当用户长按时,我需要当前的手机位置才能显示在地图上。作为@Chen advised,看起来getCurrentLocation()是在我的情况下使用的正确方法。请注意,我不想使用LocationListener,因为我希望用户可以控制何时更新其位置。

此外,我选择了这个手动位置更新,因为@ Shai-Almog discouraged location polling。因此,在阅读此post后,我首先将超时设置为20秒,如下所示,以获取当前的电话位置:

                Dialog ip = new InfiniteProgress().showInifiniteBlocking();
                Location currentLocation = locationManager.getCurrentLocationSync(
                        ParametresGeneraux.LOCATION_TIMEOUT_MILLI);
                // We try to get something
                if (currentLocation == null) {
                    currentLocation = locationManager.getLastKnownLocation();
                }
                ip.dispose();

但这还不够,最后一个已知位置是#34;总是"提供(虽然小位置图标出现在工具栏中,但我连续5次都没算)。所以我把它设置为40秒,但实际的当前位置也没有在这两倍大的时间之后(仅提供距离> 2km的最后已知位置)。

但是,如果我在Android(KitKat)上启动Google地图,则该位置即时准确。然后如果我回到我的应用程序并按下地图,则会找到当前位置。实际上我发现post处理谷歌地图和Android API之间的准确性差异,但它与上/中国有关,而不是欧盟(法国)。

因此我的问题有两个:

  1. 首先,如何在Google地图和Codename One之间的相同设备上产生如此巨大的差异?

  2. 然后,如果我没有设置超时getCurrentLocation(),当用户厌倦等待时,如何中断位置搜索?

  3. 任何帮助表示赞赏,

    BR

1 个答案:

答案 0 :(得分:1)

如果启用了Google地图位置服务,则即时位置将起作用。如果您启用或禁用了android.playService构建提示之一,则还必须启用android.playService.location=true以获取地图使用的快速位置服务。