Class FusedLocationSource

java.lang.Object
com.naver.maps.map.util.FusedLocationSource
All Implemented Interfaces:
LocationSource

@UiThread public class FusedLocationSource extends Object implements LocationSource
Google Play 서비스의 Fused Location Provider를 사용하는 LocationSource 구현체.

이 구현체를 사용하려면 build.gradleplay-services-location 21.0.1 이상에 대한 의존성을 추가해야 합니다.
 dependencies {
     implementation("com.google.android.gms:play-services-location:21.0.1")
 }
 
또한 AndroidManifest.xmlACCESS_COARSE_LOCATION 또는 ACCESS_FINE_LOCATION 권한을 명시해야 합니다.
 <manifest>
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 </manifest>
 
이 클래스는 런타임 권한 처리 기능을 내장하고 있으므로, 생성자에 Activity 또는 Fragment 객체를 전달하고 권한 요청 코드를 지정해야 합니다. 또한 onRequestPermissionResult()의 결과를 onRequestPermissionsResult(int, String[], int[])에 전달해야 합니다.
 public class LocationSourceActivity extends Activity {
     private static final int LOCATION_PERMISSION_REQUEST_CODE = 1000;

     private FusedLocationSource locationSource;
     private NaverMap naverMap;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         locationSource = new FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE);
     }

     @Override
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
         @NonNull int[] grantResults) {
         if (locationSource.onRequestPermissionsResult(requestCode, permissions, grantResults)) {
             if (!locationSource.isActivated()) { // 권한 거부됨
                 naverMap.setLocationTrackingMode(LocationTrackingMode.None);
             }
             return;
         }

         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
     }
 }
 
  • Constructor Details

    • FusedLocationSource

      public FusedLocationSource(@NonNull androidx.fragment.app.Fragment fragment, int permissionRequestCode)
      Fragment를 사용하는 생성자.
      Parameters:
      fragment - 권한을 요청할 Fragment 객체.
      permissionRequestCode - 권한 요청 코드.
    • FusedLocationSource

      public FusedLocationSource(@NonNull android.app.Activity activity, int permissionRequestCode)
      Activity를 사용하는 생성자.
      Parameters:
      activity - 권한을 요청할 Activity 객체.
      permissionRequestCode - 권한 요청 코드.
  • Method Details

    • onRequestPermissionsResult

      public boolean onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
      FusedLocationSource를 생성한 Activity 또는 FragmentonRequestPermissionsResult()에서 반드시 호출해야 하는 메서드.
      Parameters:
      requestCode - onRequestPermissionsResult()로 전달받은 requestCode.
      permissions - onRequestPermissionsResult()로 전달받은 permissions.
      grantResults - onRequestPermissionsResult()로 전달받은 grantResults.
      Returns:
      권한 처리 여부. requestCode가 생성자에 지정한 permissionRequestCode와 같을 경우 true, 그렇지 않을 경우 false.
    • isActivated

      public boolean isActivated()
      활성화 여부를 반환합니다. 연결된 지도 객체가 위치 추적 기능을 사용하면 활성화됩니다. 위치 권한이 부여되지 않았다면 비활성화된 것으로 간주됩니다.
      Returns:
      활성화된 경우 true, 그렇지 않은 경우 false.
    • getActivationHook

      @Nullable public FusedLocationSource.ActivationHook getActivationHook()
      위치 기능의 활성화에 대한 훅 객체를 반환합니다.
      Returns:
      훅 객체. 지정된 훅 객체가 없을 경우 null.
    • setActivationHook

      public void setActivationHook(@Nullable FusedLocationSource.ActivationHook activationHook)
      위치 기능의 활성화에 대한 훅 객체를 지정합니다.
      Parameters:
      activationHook - 훅 객체. null일 경우 후킹이 해제됩니다.
    • activate

      public void activate(@NonNull LocationSource.OnLocationChangedListener listener)
      NaverMap의 위치 추적 기능이 활성화되면 호출되는 메서드. 활성화되면 LocationSource.deactivate()가 호출될 때까지 주기적으로 listenerLocationSource.OnLocationChangedListener.onLocationChanged(Location)가 호출돼야 합니다.
      Specified by:
      activate in interface LocationSource
      Parameters:
      listener - 이벤트 리스너 객체.
    • deactivate

      public void deactivate()
      NaverMap의 위치 추적 기능이 비활성화되면 호출되는 메서드. 비활성화되면 이전에 지정되었던 listenerLocationSource.OnLocationChangedListener.onLocationChanged(Location)가 더 이상 호출돼서는 안 됩니다.
      Specified by:
      deactivate in interface LocationSource
    • isCompassEnabled

      public boolean isCompassEnabled()
      나침반의 활성화 여부를 반환합니다. 활성화할 경우 장치의 가속, 지자기 센서를 이용해 사용자가 바라보는 방위를 측정하고, 측정된 방위를 Location에 반영합니다.

      기본값은 false입니다.
      Returns:
      활성화된 경우 true, 그렇지 않을 경우 false.
    • setCompassEnabled

      public void setCompassEnabled(boolean enabled)
      나침반의 활성화 여부를 지정합니다. 활성화할 경우 장치의 가속, 지자기 센서를 이용해 사용자가 바라보는 방위를 측정하고, 측정된 방위를 Location에 반영합니다. 센서는 전력을 소모하므로 다음과 같이 LocationTrackingModeLocationTrackingMode.FollowLocationTrackingMode.Face일 경우에만 활성화하는 것이 권장됩니다.
       naverMap.addOnOptionChangeListener(() -> {
           fusedLocationSource.setCompassEnabled(mode == LocationTrackingMode.Follow || mode == LocationTrackingMode.Face);
       });
       


      기본값은 false입니다.
      Parameters:
      enabled - 활성화할 경우 true, 그렇지 않을 경우 false.
    • getLastLocation

      @Nullable public android.location.Location getLastLocation()
      마지막 위치를 반환합니다. 아직 위치를 수신하기 전이라면 null이 반환됩니다.
      Returns:
      마지막 위치.