2017-12-28 3 views
0

Android 튜토리얼 및/또는 Android 공식 문서를 확인할 때 위치를 쿼리하는 데 여러 가지 다른 방법이있는 것 같습니다. 어떤 방법으로 올바른지 확실하지 않거나 설명서가 오래 되었다면 혼란 스럽습니다. 예를 들어 마지막 위치 얻기, 다양한 방법

,

1) GoogleApiClient :이 방식으로, 구글 API 클라이언트

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

를 사용하고 다음이

LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 

2) 위치 Manager와 같은 위치를 조회 :이 방법은 위치 관리자를 사용합니다.

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

3) FusedLocationApi (2 스타일) :

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에서 위치를 얻는 가장 좋은 방법입니다. 당신은 당신에게 당신도 null를 확인하기 위해 필요하므로도 null의 경우 마지막으로 알려진 위치를 제공 할 것입니다이 방법으로 FusedLocationManager

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

문제를 사용하는 두 가지 방법을 언급했다. 이 방법에서

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 메소드를 호출 등록하고 다시 마지막으로 알려진 위치가 null 장치 재부팅의 경우 here.Usually null이 될 수있는 위치에 객체를 제공 할 fusedlocationListener를 등록한다. 다른 경우도 있습니다. 두 번째 방법은 fusedlocationprovider를 사용하여 마지막으로 알려진 위치를 얻는 것이 더 효과적이므로 사용하는 것이 좋습니다.

+0

그래서 LocationManager apporach가 오래된 방법이며 단순히 fusedLocation이 더 새로운 것이므로 더 이상 권장하지 않는다고 말하고있는 것입니다. 옳은? 또한 왜 둘 다 fusedLocation이기 때문에 GoogleApiClient가 아닌 mFusedLocationClient를 사용 하시겠습니까? – Snake

+0

Btw가 Null을받는 경우는 거의 없습니다. 설정에서 위치 서비스를 끄기 만하면됩니다. 대부분의 경우 – Snake

+1

mfusedlocationclient는 연결을 관리하고 연결을 사용 중지해야하는 googleapiclient를 사용하는 동안 직접 사용할 수있는 융통성있는 위치 제공기를 제공하는 추상적 인 방법입니다. 연결 한 활동 또는 조각 파기 –