2013-01-17 163 views
8

A LocationSource定義在Google Maps Android API v2中。Google Maps Android API v2創建新的LocationSource

它用於googlemap作爲位置提供程序。默認情況下,位置來源由手機上的GPS模塊提供。

但是現在我想用另一個Location source,定位數據會定期發送到android設備。

我不知道如何實現這個接口。那裏有任何例子嗎?任何人都可以幫助我嗎?該文件沒有提到任何有關它。

回答

4

這裏有沒有什麼例子?

接口沒有太多的東西,它的實現非常依賴於你的應用程序。

This sample project實現主活動LocationSource接口:

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

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

我要做的就是守住我們在activate()遞給OnLocationChangedListener。然後,當您有想要饋送給地圖的位置修復時,請在該監聽器上撥打onLocationChanged(),提供Location對象(您可能從LocationManager返回的對象相同Location)。

12

這裏是一個簡單的實現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跟蹤當前位置

相關問題