Class FusedLocationSource

  • All Implemented Interfaces:
    LocationSource

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

    이 구현체를 사용하려면 build.gradleplay-services-location에 대한 의존성을 추가해야 합니다.
     dependencies {
         implementation 'com.google.android.gms:play-services-location:15.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 Detail

      • FusedLocationSource

        public FusedLocationSource​(@NonNull
                                   android.support.v4.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 또는 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일 경우 후킹이 해제됩니다.
      • 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:
        마지막 위치.