在Codename中使用LocationManager的正确方法之一

时间:2013-12-11 07:02:34

标签: java google-maps codenameone

我使用LocationManager跟踪用户的位置并在GoogleMaps上显示相同的位置。 我使用以下方法并对此有一些疑问。

首次获取用户的位置,我正在使用:

locationManager = LocationManager.getLocationManager();
location = locationManager.getCurrentLocation();

据我所知,这是一个阻止电话。因此,我会显示一个无限的进度条直到此方法返回。

获得该位置后,我在WebBrowser组件中调用托管在我服务器上的jsp页面,并将lat和lng传递给此页面。此页面返回一个谷歌地图,其中用户的位置为标记。

我覆盖了WebBrowser的onLoad()方法,以便在加载页面时获取事件。 加载页面后,我会立即为locationManager分配一个监听器以获取位置更新。 当我在收听者中收到更新时,我会使用BrowserComponent - >在页面上执行javascript。 execute()方法。

这种方法运作良好。

问题:

当我第一次向LocationManager查询用户的位置时,我没有明确指定一个监听器。该方法如何在内部执行?

这是否会启动自己的监听器?

如果是,那么当我在onLoad()方法中分配一个监听器时,初始监听器是否会被删除?

我应该明确清除我的locationManager的监听器吗?

或者当我分配监听器时,它是否分配了先前启动的监听器?

我最终会让两位听众做同样的工作吗?

BR,

SANKET

1 个答案:

答案 0 :(得分:2)

您正在使用API​​正确调用getCurrentLocation()或getLastKnownLocation()将返回一个Location对象。(它可以在内部启动一个侦听器,但它将在内部停止)。 当您调用setListener时,如果您不想再获取更新,则应该清除您的侦听器。 (无论哪种方式,你最终都不会有2个听众)

请注意,getCurrentLocation()可能会在Android上返回一个不太准确的Location对象,因为如果gps不可用和/或无效,它将默认为网络提供者。