Android地图v2:MyLocation-Button仅适用于GPS

时间:2013-03-04 09:29:23

标签: android google-maps gps location

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

mMap.setMyLocationEnabled(true);

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

我想在地图上显示粗略位置,甚至禁用GPS。我是否必须使用LocationManager来完成此操作?

由于

3 个答案:

答案 0 :(得分:5)

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

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

首先,在OnLocationChangedListener中声明Activity对象:

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

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

public class MapScreen extends FragmentActivity implements LocationSource {

onCreate()中,在设置地图对象时为此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的{​​{1}}:

LocationSource

如果您正在收听//Update real-time location on map if (mListener != null) { mListener.onLocationChanged(location); } 并将此提供商的位置传递到GPS_PROVIDER方法,并且关闭了GPS,那么如果您不对{{1 }},最新的GPS位置将保留在屏幕上。此时,您可以收听mListener.onLocationChanged()并将这些位置更新传递给LocationSource方法。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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