【问题标题】:Google Maps Android API v2 creating a new LocationSourceGoogle Maps Android API v2 创建新的 LocationSource
【发布时间】:2013-01-17 23:00:45
【问题描述】:

LocationSource 定义在 Google Maps Android API v2 中。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    这里是LocationSource接口的简单实现。就我而言,我正在注册 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));
        .......       
    }
    

    编辑请不要认为此解决方案已过时!您需要结合使用FusedLocationProviderApiGoogleApiClient 来跟踪当前位置

    【讨论】:

      【解决方案2】:

      有什么例子吗?

      接口不多,它的实现很大程度上取决于你的应用。

      This sample project在主Activity上实现LocationSource接口:

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

      我所做的只是抓住我们收到的OnLocationChangedListeneractivate()。然后,当您有想要提供给地图的位置修复时,请在该侦听器上调用 onLocationChanged(),并提供一个 Location 对象(您可能会从 LocationManager 返回相同的 Location 对象)。

      【讨论】:

        【解决方案3】:

        这是使用FusedLocationProviderApi的解决方案:

        Android: Google Maps location with low battery usage

        【讨论】:

          猜你喜欢
          • 2013-03-24
          • 2023-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多