경험의 기록

2021.06.25 - [Android/기본] - [Android] 안드로이드 권한 (Permission) 체크하기 - 위치정보 사용하기

 

[Android] 안드로이드 권한 (Permission) 체크하기 - 위치정보 사용하기

안드로이드에서는 특정 동작을 위하여 권한이 필요하다. 마시멜로 버전 이전에는 앱 설치시 모든 권한이 요청되었지만 이후 버전에서는 권한이 크게 일반 권한과 위험 권한으로 나뉘었다. 일반

hanyeop.tistory.com

 

안드로이드에서 Permission을 요청, 관리하기 위해서는

 

checkSelfPermission()을 통해 권한을 체크하고

requestPermissions()을 통해 요청 후 onRequestPermissionsResult()로 전달받아야 한다.

 

또한 Permission을 위해 별도의 다이얼로그 화면도 구성해주어야 한다. 

 

이 과정은 매우 복잡하다.

TedPermission 라이브러리를 사용하면 위 과정을 쉽게 처리할 수 있다.

 


1️⃣ 사용하기

https://github.com/ParkSangGwon/TedPermission

 

GitHub - ParkSangGwon/TedPermission: Easy check permission library for Android Marshmallow

Easy check permission library for Android Marshmallow - GitHub - ParkSangGwon/TedPermission: Easy check permission library for Android Marshmallow

github.com

 

라이브러리 깃허브에서

 

 

bulid.gradle

dependencies {

    // TedPermission
    implementation 'io.github.ParkSangGwon:tedpermission-normal:3.3.0'
}

최신 버전을 체크하여 bulid.gradle에 추가해준다.

 

 

manifest

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-permission android:name="android.permission.READ_CALENDAR"/>

이제 사용할 권한을 선언해준다. 임의로 위치 권한과 캘린더 권한을 요청하려고 한다.

 

권한 요청하기

setPermissions안에 요청할 권한들을 작성한다.

setDeniedMessage에 작성된 메세지는 권한이 없을 때 다이얼로그로 나타난다.

 

PermissionListener내의 

onPermissionGranted는 이미 권한이 있거나, 권한 요청이 허가되었을 때 호출되며

onPermissionDenied는 권한이 거부되었을 때 호출된다.

 

또한 권한 요청 함수를 람다로 작성하여

권한이 있을 때 동작할 로직 함수를 받아와 호출해준다.

 

버튼 클릭 시 권한을 요청하여 이미 권한이 있거나 요청이 허가되면 todo 함수를 호출하도록 한다.

 

MainActivity

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.btnPermission.setOnClickListener {
            requestPermission {
                todo()
            }
        }
    }

    private fun todo(){
        // TODO : 기능 구현
        Toast.makeText(this, "완료", Toast.LENGTH_SHORT).show()
    }

    private fun requestPermission(logic : () -> Unit){
        TedPermission.create()
            .setPermissionListener(object : PermissionListener {
                override fun onPermissionGranted() {
                    logic()
                }
                override fun onPermissionDenied(deniedPermissions: List<String>) {
                    Toast.makeText(this@MainActivity,
                        "권한을 허가해주세요.",
                        Toast.LENGTH_SHORT)
                        .show()
                }
            })
            .setDeniedMessage("권한을 허용해주세요. [설정] > [앱 및 알림] > [고급] > [앱 권한]")
            .setPermissions(Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.READ_CALENDAR )
            .check()
    }
}

 

이제 버튼 클릭 시 자동으로 권한을 체크하여 권한이 없을 경우 권한을 요청한다.

 

권한이 없을 경우 다이얼로그로 알려준다.

 

 

권한이 있으면 이제 버튼 클릭 시 todo 함수에 구현한 기능이 잘 작동하는 것을 확인할 수 있다.

 

 

전체 코드

https://github.com/HanYeop/AndroidStudio-Practice2/tree/master/PermissionEx

 

GitHub - HanYeop/AndroidStudio-Practice2: (2021.05.20~) 안드로이드 학습 내용 저장소

(2021.05.20~) 안드로이드 학습 내용 저장소. Contribute to HanYeop/AndroidStudio-Practice2 development by creating an account on GitHub.

github.com

 

 

 

참고

https://github.com/ParkSangGwon/TedPermission

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading