2013-01-17 12 views
8

Eine LocationSource ist in Google Maps Android API v2 definiert.Google Maps Android API v2 erstellt eine neue LocationSource

Es wird für googlemap als Standortanbieter verwendet. Standardmäßig wird die Standortquelle vom GPS-Modul des Telefons bereitgestellt.

Aber jetzt möchte ich eine andere Location source verwenden, die Standortdaten werden regelmäßig an Android-Gerät gesendet.

Ich habe keine Ahnung, wie diese Schnittstelle zu implementieren ist. Gibt es da draußen ein Beispiel? Kann mir jemand dabei helfen? Das Dokument hat nichts darüber gesagt.

Antwort

4

Gibt es ein Beispiel?

Es gibt nicht viel zu der Schnittstelle, und ihre Implementierung hängt sehr von Ihrer App ab.

This sample project implementiert die LocationSource-Schnittstelle auf der Haupttätigkeit:

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

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

Alles, was ich tun ist, halten auf die OnLocationChangedListener, die wir in activate() geben werden. Wenn Sie einen Standort-Fix haben, den Sie der Karte zuführen möchten, rufen Sie dann onLocationChanged() für diesen Listener auf und stellen ein Location-Objekt bereit (das gleiche Location-Objekt, das Sie möglicherweise von LocationManager erhalten).

12

Hier ist eine einfache Implementierung von LocationSource Schnittstelle. In meinem Fall registriere ich sowohl GPS- als auch Netzwerkstandortanbieter. Wie von @CommonsWare erwähnt, kann die Implementierung sehr von Ihren Bedürfnissen abhängen. Ich würde vorschlagen, official documentation über Location-Service, um zu lesen, besser zu verstehen, wie Ihre Bedürfnisse zu nutzen und einige Batterieleistung

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 

    } 
} 

Und hier ist zu speichern, wie ich diese Klasse verwenden würde:

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

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

EDIT Bitte nicht, dass diese Lösung veraltet ist! Sie müssen sich mit GoogleApiClient für die Verfolgung von aktuellen Standort

Verwandte Themen