我有一个关于使用内置“我的位置”按钮的问题。在我的设置中我有
mMap.setMyLocationEnabled(true);
因此,按钮在地图上呈现,当GPS打开时,它就像一个魅力。当GPS关闭时,它不再起作用。 “我的位置”按钮的标准行为是否仅在启用GPS时才起作用?
我想在地图上显示粗略位置,甚至禁用GPS。我是否必须使用LocationManager来完成此操作?
由于
答案 0 :(得分:5)
借助Android Maps API V2,您可以使用LocationSource
和LocationSource.OnLocationChangedListener
传递您自己的位置更新,并控制地图上显示的位置。
例如,您可以通过普通LocationListener
收听GPS_PROVIDER
或NETWORK_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)
您似乎必须请求位置更新。即使您没有在代码中使用传入位置,也会出现蓝点。