[19. 위치 정보 활용]
[19-1. 사용자 위치 얻기]
1) 플랫폼 API 이용하는 방법
2) 구글 PLAY 서비스 제공 라이브러리 이용하는 방법
[위치 접근 권한]
-각 상황에 맞춰 매니파스트 파일에 다음 권한 등록
ACCESS_COARSE_LOCATION | 정확도 높아야 할 때 |
ACCESS_FINE_LOCATION | 대략의 위치 확인할 때 |
ACCESS_BACKGROUND_LOCATION | 백그랑누드 상황에서 위치 접근할 때 |
< + 서비스 컴포넌트에서 위치 접근 필요한 경우 >
-foregroundServiceType 속성에 “location” 지정 필요
<service
android:name=“MyNavigationService”
android:foregroundServiceType = “location”
. . .
</service>
① [플랫폼 API의 위치 매니저 사용]
1) LocationManager 위치 매니저 사용 2) 위치 제공자 지정 3) 위치 정보 얻기 ⓐ 위치 한 번만 가져오기 LocationManager의 getLastKnownLocation() 함수 사용 ⓑ 위치 계속 가져오기 LocationListener 구현 객체 사용 |
1) 위치 매니저 사용 : LocationManager 위치 매니저
val manager = getSystemService(LOCATION_SERVICE) as LocationManager
2) 위치 제공자 지정
<위치 제공자 종류>
GPS | GPS 위성 이용 |
Network | 이동 통신망 이용 |
Wifi | 와이파이 이용 |
Passive | 다른 앱에서 이용한 마지막 위치 정보 이용 |
⇒ [현재 기기에 어떤 위치 제공자 있는지 알고 싶다면? ] LocationManager의 allProviders 프로퍼티 이용
⇒ [지금 사용 가능한 위치 제공자 알고 싶다면? ] LocationManager의 getProviders() 함수 이용
3) 위치 정보 얻기
ⓐ [위치 ‘한 번만’ 가져오기]
-LocationManager의 getLastKnownLocaion() 함수 이용
-이 함수 반환값은 ‘Location 객체’임 (단, null 이면 위치 획득 실패)
-Location 객체 : 내부에 위치 정확도/위도/경도/획득시간 등의 데이터 포함 객체
getAccuracy() | 위치 정확도 얻기 |
getLatitude() | 위도 얻기 |
getLongitude | 경도 얻기 |
getTime() | 획득 시간 얻기 |
ⓑ [위치 ‘계속’ 가져오기]
- LocationListener 구현 객체를
LocationManager의 requestLocationUpdates() 함수로 등록
- 더 이상 필요 없으면 removeUpdated() 함수로 해제
<LocationListener> 내부 함수들
onLocationChanged() | 새로운 위치 가져오면 호출됨 |
onProviderEnabled() | 위치 제공자가 이용 O -> 호출됨 |
onProviderDisabled() | 위치 제공자가 이용 X -> 호출됨 |
② [구글 Play 서비스의 위치 라이브러리 사용]
- Fused Location Provider 라이브러리 사용
- 이 라이브러리 사용 준비 : build,gradle 에 dependencies 항목으로 사용 등록
implementation ‘com.google.android.gms:play-service:12.0.1;
<Fused Location Provide 의 핵심 클래스>
FusedLocationProviderClient | 위치 정보 얻음 |
GoogleApiClient | 위치 제공자 준비 등 다양한 콜백 제공 |
-GoogleApiClient에서 위치 정보 제공자 결정하면 이를 이용해서 FusedLocationProviderClient에서 위치를 가져오는 구조
1) GoogleApiClient 초기화 2) FusedLocationProviderClient 초기화 3) GoogleApiClient 객체에 connect() 함수로 ‘위치 제공자 요청’ 4) 사용자 위치 얻기 : onConnected() 호출하여 내부의 FusedLocationProviderClient의 getLastLocation() 함수 호출함 |
[19-2. 구글 지도 활용]
-지도 서비스 제공 업체의 API 이용하여 지도 출력 O
-여기서는 ‘구글 지도’ 이용
[지도 사용 설정]
① build.gradle 에 구글 지도 사용 선언
implementation ‘com.google.android.gms:play-services:12.0.1;
② 매니페스트에 퍼미션 등록
-구글 지도: 구글 서버에서 전송되는 데이터이므로 네트워크 통신 권한도 등록 필요
<uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE”/>
<uses-permission android:name=“android.permission.INTERNET”/>
<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE”/>
③ 매니페스트에 구글 지도 API 키 등록
<application ...
<uses-library android:name=“org.apache.http.legacy”android:required= “false”/>
<meta-data android:name=“com.google.android.maps.v2.API_KEY”
android:value=“###구글 지도 API 키 등록###”/>
<meta-data android:name=“com.google.android:gms.version”
android:value=“@integer/google_play_services_version”/>
</application>
[구글 개발자 콘솔에서 지도 API 키 얻기]
-구글 개발자 콘솔(console.cloud.google.com)에 접속하여 프로젝트 생성하고 사용자 인증정보 만들면 지도 API 키 발급 가능O
-매니페스트 파일에 <meta-data>태그의 value 속성값으로 발급받은 지도 API 키 등록
<레이아웃 XML>
-play-services 라이브러리에서 지도를 ‘프래그먼트’로 제공해주므로 지도 출력할 화면에 프래그먼트 등록
[지도 제어하기]
-기본 위치 = 아프리카 대륙
<지도의 중심 이동>
1) 지도 출력 뷰 객체 얻기
- onMapReadyCallback 구현 객체를 SupportMapFragment의 getMapAsync()함수에 전달.
-지도 객체 이용 가능할 때, onMapReady() 함수 자동 호출되면서 매개변수로 GoogleMap 객체 전달해줌
2) 지도의 중심이동
- 지도 한 지점의 위도/경도를 LatLng 객체로 표현함
- CameraPosition 객체의 target() 함수로 위치 지정. zoom() 함수로 확대수준 지정
- 이 객체를 GoogleMap 객체의 moveCamera()에 전달
<마커 표시하기>
-Bitmap객체로 표현 or 개발자 준비 이미지 or ply-services 제공 이미지 이용
-MarkerOptions 객체에 ‘마커 정보’ 담은 후, 이 객체를 GoogleMap의 addMarker()에 전달
val markerOptions = MarkerOptions()
markerOptions.icon(...) // 출력할 이미지 지정
markerOptions.position( ..) //출력할 위치 지정
markerOptions.title(“ .. ” ) //도움말 표시 정보 지정
markerOptions.snippet(“...”)
googleMap?.addMarker(markerOptions) //마커 정보 객체를 전달
<지도에서 사용자 이벤트 처리>
-사용자 이벤트 처리 인터페이스
GoogleMap.OnMapCLickListener | 지도 클릭 이벤트 |
GoogleMap.OnMapLongClickListener | 지도 롱 클릭 이벤트 |
GoogleMap.OnMarkerClickListener | 마커 클릭 이벤트 |
GoogleMap.OnMarkerDragListener | 마커 드래그 이벤트 |
GoogleMap.OnInfoWindowClickListener | 정보 창 클릭 이벤트 |
GoogleMap.OnCameraIdleListener | 지도 화면 변경 이벤트 |
[19-3. 구글 지도 앱 만들기] : 실습
[참고] : Do It 안드로이드 앱 프로그래밍 with 코틀린 |
'App(앱)_관련 공부 모음 > [교재] Andorid App_Kotlin 기반' 카테고리의 다른 글
21. [파이어스토어, 스토리지, FCM] (0) | 2022.03.31 |
---|---|
20. [파이어베이스 연동과 인증 기능] (0) | 2022.03.31 |
18. [네트워크 프로그래밍] (0) | 2022.03.26 |
17. [저장소에 데이터 보관] (0) | 2022.03.25 |
16. [콘텐츠 프로바이더 컴포넌트] (0) | 2022.03.24 |