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

mwe*_*b84 2 gps android location google-maps

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

mMap.setMyLocationEnabled(true);

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

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

谢谢

Sea*_*eau 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
Run Code Online (Sandbox Code Playgroud)

然后,为您的活动实现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);
...
Run Code Online (Sandbox Code Playgroud)

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

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

/**
 * Maps V2 Location updates
 */
@Override
public void deactivate() {
     mListener = null;      
}
Run Code Online (Sandbox Code Playgroud)

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

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

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