안드로이드 프로그래밍[Kotiln Code]/안드로이드 부분 함수(권한얻기,인텐트, 데이터바인딩)

LocationManager 이용 해서 기기 위치 정보 가져 오기

훈츠 2020. 3. 25. 02:19
반응형

안녕하세요. 훈츠 입니다. 안드로이드 단말에 위치 정보를 가져오는 방법을 정리 합니다. 

LocationManager 

  • 위치 정보를 위도, 경도로 가져올 수 있습니다. 
    • 기기의 GPS 모듈 이용
    • 통신사의 기지국 정보 (NetWork) 이용

권한 설정

manifest 에 권한을 설정 합니다. 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.memoapp">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    ...이하 생략

권한 요청 및 확인 함수 

introActivity 를 이용 해서, 최초 권한을 얻고 확인 하는 함수를 구현합니다.

class IntroActivity : AppCompatActivity() {
    var handler : Handler? = null
    var runnable : Runnable? = null
    //권한 요청시 권한 Activity에 전달할 고유 코드(상수) 추가
    companion object {
        private const val REQUEST_LOCATION_PERMISSION_CODE = 100
    }
    //유저 함수들
    //위치 권한이 허용되어 있는지 체크하는 함수
    fun checkLocationPermission() : Boolean {
        val findLocationPermission = ContextCompat.checkSelfPermission(this,
            android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
        val coarseLocationPermission = ContextCompat.checkSelfPermission(this,
            android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
        return findLocationPermission && coarseLocationPermission
    }
    //인트로 -> 리스트 액티비티 이동 함수
    fun moveListActivity(){
        //Runnable이 실행되면 ListActivity로 이동하는 코드
        runnable = Runnable {
            val intent = Intent(applicationContext, ListActivity::class.java)
            startActivity(intent)
        }
        //Handler 를 생성하고 2초후 runnable을 실행
        handler = Handler()
        handler?.run{
            postDelayed(runnable, 2000)
        }

    }
    override fun onResume() {
        super.onResume()
        //권한 있으면, 리스트 액티비티로 이동
        if(checkLocationPermission()){
            moveListActivity()
        }
        else
        {
            //앱 권한 체크 메시지
            if(ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION))
                {
                    Toast.makeText(this, "이 앱을 실행 하려면 위치 권한이 필요합니다.",Toast.LENGTH_LONG).show()
                }
            //권한 액티비티 요청 띄우기
            ActivityCompat.requestPermissions(
                this,
                arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION,
                    android.Manifest.permission.ACCESS_COARSE_LOCATION),
                REQUEST_LOCATION_PERMISSION_CODE)
        }

    }

    override fun onPause() {
        super.onPause()
        //Acitivity 가 Pause 상태일 때는 runnable 도 중단 하도록 함.
        handler?.removeCallbacks(runnable)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_intro)
        //안드로이드 앱을 띄우는 Window의 속성을 변경하여 시스템 UI를 숨기고 전체화면으로 표시하는 코드
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE or
                View.SYSTEM_UI_FLAG_FULLSCREEN or
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
                View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    }
}

 

val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
val isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
val isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

반응형