Package com.naver.maps.map.util
Class FusedLocationSource
- java.lang.Object
-
- com.naver.maps.map.util.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-location21.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); } }
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceFusedLocationSource.ActivationHook위치 기능의 활성화에 대한 후킹 인터페이스.-
Nested classes/interfaces inherited from interface com.naver.maps.map.LocationSource
LocationSource.OnLocationChangedListener
-
-
Constructor Summary
Constructors Constructor Description FusedLocationSource(android.app.Activity activity, int permissionRequestCode)Activity를 사용하는 생성자.FusedLocationSource(androidx.fragment.app.Fragment fragment, int permissionRequestCode)Fragment를 사용하는 생성자.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidactivate(LocationSource.OnLocationChangedListener listener)NaverMap의 위치 추적 기능이 활성화되면 호출되는 메서드.voiddeactivate()NaverMap의 위치 추적 기능이 비활성화되면 호출되는 메서드.FusedLocationSource.ActivationHookgetActivationHook()위치 기능의 활성화에 대한 훅 객체를 반환합니다.android.location.LocationgetLastLocation()마지막 위치를 반환합니다.booleanisActivated()활성화 여부를 반환합니다.booleanisCompassEnabled()나침반의 활성화 여부를 반환합니다.booleanonRequestPermissionsResult(int requestCode, java.lang.String[] permissions, int[] grantResults)voidsetActivationHook(FusedLocationSource.ActivationHook activationHook)위치 기능의 활성화에 대한 훅 객체를 지정합니다.voidsetCompassEnabled(boolean enabled)나침반의 활성화 여부를 지정합니다.
-
-
-
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)- 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()가 호출될 때까지 주기적으로listener의LocationSource.OnLocationChangedListener.onLocationChanged(Location)가 호출돼야 합니다.- Specified by:
activatein interfaceLocationSource- Parameters:
listener- 이벤트 리스너 객체.
-
deactivate
public void deactivate()
NaverMap의 위치 추적 기능이 비활성화되면 호출되는 메서드. 비활성화되면 이전에 지정되었던listener의LocationSource.OnLocationChangedListener.onLocationChanged(Location)가 더 이상 호출돼서는 안 됩니다.- Specified by:
deactivatein interfaceLocationSource
-
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:
- 마지막 위치.
-
-