android - Google Maps Android API v2 创建一个新的 LocationSource

标签 android google-maps-android-api-2

LocationSourceGoogle Maps Android API v2 中定义.

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

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

我不知道如何实现这个接口(interface)。那里有例子吗?任何人都可以帮我吗?该文件没有说明任何内容。

最佳答案

这里是LocationSource接口(interface)的简单实现。就我而言,我正在注册 GPS 和网络位置提供商。正如@CommonsWare 所提到的,实现可能非常取决于您的需要。我建议阅读 official documentation关于位置服务,以便更好地了解如何利用您的需求并节省一些电池电量

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用于跟踪当前位置

关于android - Google Maps Android API v2 创建一个新的 LocationSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14389736/

相关文章:

android - 在我的应用程序中更改设备语言

android - 在 google maps API v2 for android 中使用或不使用 getMyLocation ()?

Android Google Maps GeoJson,如何为整个 map 着色一种颜色

android - 添加 "mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();"后应用程序不断崩溃

android - 部署时谷歌地图出现 BadParcelableException

android - 如何将旋转按钮添加到 Android 图像裁剪屏幕?

java - 将此 Activity 转换为 fragment

android - 无法更改默认输出文件夹

android - 为 Google Maps Android API 标记着色

Android Google Maps Api V2,获取当前 map 中心的坐标