8

ALocationSourceはGoogleMapsAndroidAPIv2で定義されています

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

しかし、今は別のものを使用したいのでLocation source、位置データは定期的にAndroidデバイスに送信されます。

このインターフェースを実装する方法がわかりません。そこに例はありますか?誰かがそれを手伝ってくれますか?その文書はそれについて何も述べていませんでした。

4

3 に答える 3

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

    }
}

そして、これが私がこのクラスを使用する方法です:

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

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

編集このソリューションは時代遅れであることに注意してください! 現在の位置を追跡するには、 FusedLocationProviderApiをGoogleApiClientと組み合わせて使用​​する必要があります

于 2013-01-17T23:22:28.037 に答える
5

そこに何か例はありますか?

インターフェースには多くのことはなく、その実装はアプリに大きく依存しています。

このサンプル プロジェクトLocationSourceは、メイン アクティビティにインターフェイスを実装します。

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

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

OnLocationChangedListener渡されたものを握るだけだactivate()。次に、マップにフィードしたい場所の修正がある場合は、onLocationChanged()そのリスナーを呼び出して、オブジェクト (から返されるオブジェクトLocationと同じもの) を提供します。LocationLocationManager

于 2013-01-17T23:11:28.480 に答える