【问题标题】:Android maps v2: MyLocation-Button only works with GPSAndroid 地图 v2:MyLocation-Button 仅适用于 GPS
【发布时间】:2013-03-04 09:29:22
【问题描述】:

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

mMap.setMyLocationEnabled(true);

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

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

谢谢

【问题讨论】:

  • 如果 GPS 关闭,它如何获取位置?
  • 使用“网络”模式。该位置不会像 GPS 估计的位置那么精确

标签: android google-maps gps location


【解决方案1】:

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

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

首先,在您的Activity 中声明一个OnLocationChangedListener 对象:

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

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

public class MapScreen extends FragmentActivity implements LocationSource {

onCreate() 中,当您设置地图对象时,为此Activity 设置LocationSource

...
// 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 传递到实现LocationSourceActivity

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-09
        • 2012-06-21
        • 1970-01-01
        相关资源
        最近更新 更多