【问题标题】:How can I interrupt getCurrentLocation method (Codename One Location Manager)?如何中断 getCurrentLocation 方法(代号 One Location Manager)?
【发布时间】:2017-01-19 20:55:59
【问题描述】:

我的应用具有地图,当用户长按它时,我需要当前手机位置出现在地图上。正如@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();

但这还不够,尽管工具栏中出现了小位置图标,但“总是”提供了最后一个已知位置(我可能没有连续数 5 次)。所以我将它设置为 40 秒,但实际的当前位置在这两倍大的时间之后也没有出现(只提供了最后一个已知位置 > 2 公里)。

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

因此我的问题是双重的:

  1. 首先,Google Maps 和 Codename One 在同一设备上怎么会有如此巨大的差异?

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

任何帮助表示赞赏,

BR

【问题讨论】:

    标签: geolocation codenameone


    【解决方案1】:

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

    【讨论】:

    • 太棒了,非常感谢@Shai!在构建提示中添加 android.playService.location=true 可以更快地显示当前位置 (more details on CN1 blog)。到目前为止它仍然不准确,但谷歌地图也不起作用,所以我无法进行比较。对了,你看到我的另一个question了吗?
    • 我错过了那个问题,你是不是忘了一开始就标记它?
    • 不,我没有忘记,只是很惊讶,因为您总是快速回答。无论如何感谢您的回复!
    • 我认为 SO 将我使用的默认标签视图的行为从活动的“新”更改为“活动”,这可能会降低这个答案。然后他们将其恢复,因为这是一个愚蠢的默认设置,但到那时我已经错过了这个问题。
    猜你喜欢
    • 2022-01-07
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多