Class FusedLocationSource

  • All Implemented Interfaces:
    LocationSource

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

    이 구현체를 사용하려면 build.gradle에 play-services-location 21.0.1 이상에 대한 의존성을 추가해야 합니다.
     dependencies {
         implementation("com.google.android.gms:play-services-location:21.0.1")
     }
     
    또한 AndroidManifest.xml에 ACCESS_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 Detail

      • 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 Detail

      • onRequestPermissionsResult

        public boolean onRequestPermissionsResult​(int requestCode,
                                                  @NonNull
                                                  java.lang.String[] permissions,
                                                  @NonNull
                                                  int[] grantResults)
        FusedLocationSource를 생성한 Activity 또는 Fragment의 onRequestPermissionsResult()에서 반드시 호출해야 하는 메서드.
        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일 경우 후킹이 해제됩니다.
      • isCompassEnabled

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

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

        public void setCompassEnabled​(boolean enabled)
        나침반의 활성화 여부를 지정합니다. 활성화할 경우 장치의 가속, 지자기 센서를 이용해 사용자가 바라보는 방위를 측정하고, 측정된 방위를 Location에 반영합니다. 센서는 전력을 소모하므로 다음과 같이 LocationTrackingMode가 LocationTrackingMode.Follow나 LocationTrackingMode.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:
        마지막 위치.