8

ALocationSourceGoogle Maps Android API v2中定义。

它用于 googlemap 作为位置提供者。默认情况下,位置源由手机上的 gps 模块提供。

但现在我想用另一个Location source,位置数据会定期发送到安卓设备。

我不知道如何实现这个接口。有什么例子吗?有人可以帮我吗?该文件没有说明任何内容。

4

3 回答 3

12

这是一个简单的LocationSource接口实现。就我而言,我正在注册 GPS 和网络位置提供商。正如@CommonsWare 所提到的,实施可能很大程度上取决于您的需求。我建议阅读有关定位服务的官方文档,以便更好地了解如何利用您的需求并节省一些电池电量

public class CurrentLocationProvider implements LocationSource, LocationListener
{
    private OnLocationChangedListener listener;
    private LocationManager locationManager;

    public CurrentLocationProvider(Context context)
    {
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    }

    @Override
    public void activate(OnLocationChangedListener listener)
    {
        this.listener = listener;
        LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);
        if(gpsProvider != null)
        {
            locationManager.requestLocationUpdates(gpsProvider.getName(), 0, 10, this);
        }

        LocationProvider networkProvider = locationManager.getProvider(LocationManager.NETWORK_PROVIDER);;
        if(networkProvider != null) {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000 * 60 * 5, 0, this);
        }
    }

    @Override
    public void deactivate()
    {
        locationManager.removeUpdates(this);
    }

    @Override
    public void onLocationChanged(Location location)
    {
        if(listener != null)
        {
            listener.onLocationChanged(location);
        }
    }

    @Override
    public void onProviderDisabled(String provider)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
        // TODO Auto-generated method stub

    }
}

这是我将如何使用这个类:

protected void setUpMap() {
    //init routine
    .......

    this.map.setLocationSource(new CurrentLocationProvider(this));
    .......       
}

编辑请不要说这个解决方案已经过时了!您需要结合使用FusedLocationProviderApi和GoogleApiClient来跟踪当前位置

于 2013-01-17T23:22:28.037 回答
5

有什么例子吗?

界面没有太多内容,它的实现非常依赖于您的应用程序。

这个示例项目在主要活动上实现了LocationSource接口:

  @Override
  public void activate(OnLocationChangedListener listener) {
    this.mapLocationListener=listener;
  }

  @Override
  public void deactivate() {
    this.mapLocationListener=null;
  }

我所做的就是抓住OnLocationChangedListener我们交上来的那个activate()。然后,当您有想要提供给地图的位置修复时,调用onLocationChanged()该侦听器,提供一个Location对象(Location您可能会从该对象返回相同的对象LocationManager)。

于 2013-01-17T23:11:28.480 回答
1

这是使用的解决方案FusedLocationProviderApi

Android:谷歌地图位置电池使用率低

于 2015-01-26T19:52:13.273 回答