2017-12-28 12 views
0

AndroidのチュートリアルやAndroidの公式ドキュメントをチェックすると、場所を問い合わせる方法が複数あるようです。どのような方法が正しいかわからないとき、またはドキュメントが古くなっているかどうかわからないので、私は混乱しています。例えば最後の場所を取得する方法はたくさんあります

1)GoogleApiClient:このように、それは、GoogleのAPIクライアントに

mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .addApi(LocationServices.API) 
        .build(); 

を使用していますし、それがこの

LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 

2)場所のマネージャーのような場所を問い合わせます:この方法では、位置マネージャを使用します。

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider); 

3)FusedLocationApi(第二スタイル):私たちは道を使用する必要があります

mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); 
mFusedLocationClient.getLastLocation() 
     .addOnSuccessListener(this, new OnSuccessListener<Location>() { 
      @Override 
      public void onSuccess(Location location) { 
       // Got last known location. In some rare situations, this can be null. 
       if (location != null) { 
        // Logic to handle location object 
       } 
      } 
     }); 

答えて

0

FusedLocationProviderは、現在Androidで場所を取得する最も良い方法です。 あなたがFusedLocationManager

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider); 

を使用する2つの方法を記載しているこのアプローチの問題は、それはあなたがまた、nullをチェックする必要があるので、また、nullの場合も最後の既知の場所を提供しますです。このアプローチで

mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); 
mFusedLocationClient.getLastLocation() 
    .addOnSuccessListener(this, new OnSuccessListener<Location>() { 
     @Override 
     public void onSuccess(Location location) { 
      // Got last known location. In some rare situations this can be null. 
      if (location != null) { 
       // Logic to handle location object 
      } 
     } 
    }); 

あなたに成功するonSuccessメソッドを呼び出すと、再び最後の既知の位置がヌルであるデバイスの再起動の場合にhere.Usually nullも位置オブジェクトを提供する登録しますfusedlocationListenerを登録します。他にもいくつかのケースがあります。 fusedlocationproviderを使用して2番目の方法を使用することをお勧めします。これは、最後の既知の場所がより効率的であるためです。

+0

LocationManager apporachは古い方法であり、単にfusedLocationが新しいものであるため単に推奨しないと言っています。正しい?両方ともfusedLocationであるため、なぜGoogleApiClientではなくmFusedLocationClientを使用しますか? – Snake

+0

BtwがNullになることはめったにありません。設定からロケーションサービスをオフにするだけで、大半のケース – Snake

+1

mfusedlocationclientは、接続を管理してから接続を無効にするときにgoogleapiclientを使用しているときに直接使用できるfusedlocationproviderを提供する抽象的な方法ですあなたが接続した活動や断片の破壊 –

関連する問題