2

我有一个关于使用内置“我的位置”按钮的问题。在我的设置中,我有

mMap.setMyLocationEnabled(true);

因此,该按钮呈现在地图上,当 GPS 打开时,它就像一个魅力。当 GPS 关闭时,它不再工作。“我的位置”按钮的标准行为是否仅在启用 GPS 时才起作用?

我想在地图上显示大致位置,即使 GPS 已禁用。我是否必须使用 LocationManager 来完成此操作?

谢谢

4

3 回答 3

5

使用 Android Maps API V2,您可以使用LocationSourceLocationSource.OnLocationChangedListener传递您自己的位置更新并控制地图上显示的位置。

例如,您可以通过普通的 收听GPS_PROVIDERNETWORK_PROVIDER位置更新LocationListener,并将这些位置传递给LocationSource.OnLocationChangedListener. 无论您输入什么,都会在地图上显示。

首先,OnLocationChangedListener在你的声明一个对象Activity

private OnLocationChangedListener mListener; //Used to update the map with new location

然后,为您的活动实施 LocationSource,例如:

public class MapScreen extends FragmentActivity implements LocationSource {

onCreate()中,在设置 Map 对象时LocationSource为此设置:Activity

...
// Show the location on the map
mMap.setMyLocationEnabled(true);
// Set location source
mMap.setLocationSource(this);
...

然后,添加接口所需的方法LocationSource

/**
 * Maps V2 Location updates
 */
@Override
public void activate(OnLocationChangedListener listener) {
    mListener = listener;       
}

/**
 * Maps V2 Location updates
 */
@Override
public void deactivate() {
     mListener = null;      
}

最后一部分是将位置更新从正常LocationListener传递到Activity实现LocationSource

//Update real-time location on map
if (mListener != null) {
    mListener.onLocationChanged(location);
}

如果您正在收听GPS_PROVIDER该提供程序的位置并将其传递到该mListener.onLocationChanged()方法中,并且您关闭了 GPS,如果您没有对 采取任何进一步的操作LocationSource,则最新的 GPS 位置将保留在屏幕上。此时您可以收听NETWORK_PROVIDER并将这些位置更新传递给该mListener.onLocationChanged()方法。

于 2013-03-08T04:20:46.607 回答
1

您需要缓存最后一个已知位置,并在您没有​​打开 gps 或 gps 不可用时显示它。

于 2013-03-04T16:38:28.243 回答
0

看来您必须请求位置更新。即使您没有在代码中使用传入位置,也会出现蓝点。

于 2014-07-12T13:48:45.693 回答