반응형
안녕하세요. 훈츠 입니다. 안드로이드 단말에 위치 정보를 가져오는 방법을 정리 합니다.
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)
'안드로이드 프로그래밍[Kotiln Code] > 안드로이드 부분 함수(권한얻기,인텐트, 데이터바인딩)' 카테고리의 다른 글
안드로이드 앱 종료 방법 (0) | 2020.03.30 |
---|---|
TODO 사용 하기 (0) | 2020.03.30 |
AlertDialog 와 SnackBar (0) | 2020.03.24 |
인텐트 이동 및 간단한 사용법 (0) | 2020.03.24 |
안드로이드 위험 권한 요청 및 권한체크 (0) | 2020.03.24 |