我有一个关于使用内置“我的位置”按钮的问题。在我的设置中,我有
mMap.setMyLocationEnabled(true);
因此,该按钮呈现在地图上,当 GPS 打开时,它就像一个魅力。当 GPS 关闭时,它不再工作。“我的位置”按钮的标准行为是否仅在启用 GPS 时才起作用?
我想在地图上显示大致位置,即使 GPS 已禁用。我是否必须使用 LocationManager 来完成此操作?
谢谢
我有一个关于使用内置“我的位置”按钮的问题。在我的设置中,我有
mMap.setMyLocationEnabled(true);
因此,该按钮呈现在地图上,当 GPS 打开时,它就像一个魅力。当 GPS 关闭时,它不再工作。“我的位置”按钮的标准行为是否仅在启用 GPS 时才起作用?
我想在地图上显示大致位置,即使 GPS 已禁用。我是否必须使用 LocationManager 来完成此操作?
谢谢
使用 Android Maps API V2,您可以使用LocationSource
和LocationSource.OnLocationChangedListener
传递您自己的位置更新并控制地图上显示的位置。
例如,您可以通过普通的 收听GPS_PROVIDER
或NETWORK_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()
方法。
您需要缓存最后一个已知位置,并在您没有打开 gps 或 gps 不可用时显示它。
看来您必须请求位置更新。即使您没有在代码中使用传入位置,也会出现蓝点。