1+ package com.woozoo.menumeonya
2+
3+ import android.Manifest
4+ import android.content.pm.PackageManager
5+ import android.location.Location
6+ import android.location.LocationListener
7+ import android.location.LocationManager
8+ import android.os.Bundle
9+ import androidx.appcompat.app.AppCompatActivity
10+ import androidx.core.content.ContextCompat
11+ import com.naver.maps.geometry.LatLng
12+ import com.naver.maps.map.CameraUpdate
13+ import com.naver.maps.map.LocationTrackingMode
14+ import com.naver.maps.map.MapView
15+ import com.naver.maps.map.NaverMap
16+ import com.naver.maps.map.util.FusedLocationSource
17+
18+ class NaverActivity : AppCompatActivity (), LocationListener {
19+
20+ private lateinit var mapView: MapView
21+ private lateinit var locationSource: FusedLocationSource
22+ private lateinit var naverMap: NaverMap
23+
24+ private lateinit var locationManager: LocationManager
25+
26+ companion object {
27+ private const val LOCATION_PERMISSION_REQUEST_CODE = 1000
28+ }
29+
30+ override fun onCreate (savedInstanceState : Bundle ? ) {
31+ super .onCreate(savedInstanceState)
32+ setContentView(R .layout.activity_naver)
33+
34+ mapView = findViewById(R .id.naver_map)
35+ mapView.onCreate(savedInstanceState)
36+
37+ locationSource =
38+ FusedLocationSource (this , LOCATION_PERMISSION_REQUEST_CODE )
39+
40+ mapView.getMapAsync {
41+ this .naverMap = it
42+ naverMap.locationSource = locationSource
43+ naverMap.locationTrackingMode = LocationTrackingMode .NoFollow
44+
45+ val uiSetting = naverMap.uiSettings
46+ uiSetting.isLocationButtonEnabled = true
47+
48+ if (checkPermission()) {
49+ locationManager.requestLocationUpdates(
50+ LocationManager .NETWORK_PROVIDER , 1000 , 10f , this )
51+ }
52+ }
53+
54+ locationManager = getSystemService(LOCATION_SERVICE ) as LocationManager
55+ }
56+
57+ override fun onRequestPermissionsResult (requestCode : Int ,
58+ permissions : Array <String >,
59+ grantResults : IntArray ) {
60+ if (locationSource.onRequestPermissionsResult(requestCode, permissions,
61+ grantResults)) {
62+ if (! locationSource.isActivated) { // 권한 거부됨
63+ naverMap.locationTrackingMode = LocationTrackingMode .None
64+ }
65+ return
66+ }
67+ super .onRequestPermissionsResult(requestCode, permissions, grantResults)
68+ }
69+
70+
71+
72+ override fun onStart () {
73+ super .onStart()
74+ mapView.onStart()
75+
76+ if (checkPermission()) {
77+ locationManager.requestLocationUpdates(
78+ LocationManager .NETWORK_PROVIDER , 1000 , 10f , this )
79+ }
80+ }
81+
82+ private fun checkPermission (): Boolean {
83+ return ContextCompat .checkSelfPermission(this ,
84+ Manifest .permission.ACCESS_FINE_LOCATION ) != PackageManager .PERMISSION_DENIED
85+ }
86+
87+ override fun onResume () {
88+ super .onResume()
89+ mapView.onResume()
90+ }
91+
92+ override fun onPause () {
93+ super .onPause()
94+ mapView.onPause()
95+ }
96+
97+ override fun onSaveInstanceState (outState : Bundle ) {
98+ super .onSaveInstanceState(outState)
99+ mapView.onSaveInstanceState(outState)
100+ }
101+
102+ override fun onStop () {
103+ super .onStop()
104+ mapView.onStop()
105+ }
106+
107+ override fun onDestroy () {
108+ super .onDestroy()
109+ mapView.onDestroy()
110+ }
111+
112+ override fun onLowMemory () {
113+ super .onLowMemory()
114+ mapView.onLowMemory()
115+ }
116+
117+ override fun onLocationChanged (location : Location ) {
118+ if (location == null ) {
119+ return
120+ }
121+
122+ val coord = LatLng (location)
123+
124+ val locationOverlay = naverMap.locationOverlay
125+ locationOverlay.isVisible = true
126+ locationOverlay.position = coord
127+ locationOverlay.bearing = location.bearing
128+
129+ naverMap.moveCamera(CameraUpdate .scrollTo(coord))
130+ }
131+ }
0 commit comments