2013-01-17 17 views
8

LocationSourceGoogle Maps Android API v2で定義されています。Google Maps Android API v2で新しいロケーションソースを作成

ロケーションプロバイダとしてgooglemapに使用されます。デフォルトでは、ロケーションソースは電話機のgpsモジュールによって提供されます。

しかし、私は別のLocation sourceを使用したいと思います。位置情報は定期的にアンドロイドデバイスに送信されます。

このインターフェイスの実装方法はわかりません。そこに例がありますか?誰もそれで私を助けることができますか?その文書はそれについて何も言わなかった。

答えて

4

例はありますか?

インターフェイスにはあまりありません。その実装はアプリに非常に依存しています。私はすべての私たちはactivate()に渡されOnLocationChangedListener上に保持され

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

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

This sample projectが主な活動でLocationSourceインターフェイスを実装しています。次に、地図にフィードしたい位置情報がある場合は、Locationオブジェクト(同じLocationオブジェクトをLocationManagerから返すことがあります)を指定して、そのリスナーのonLocationChanged()に電話してください。

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 

    } 
} 

そして、ここでは、私はこのクラスを使用する方法で、より良いあなたのニーズを活用する方法を理解するために、ロケーションサービスについてofficial documentationを読んで示唆し、いくつかのバッテリーの電力を節約します:

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

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

EDITをこのソリューションは時代遅れではありません。あなたがここ

関連する問題