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

안드로이드 위험 권한 요청 및 권한체크

훈츠 2020. 3. 24. 15:46
반응형

안녕하세요. 훈츠 입니다. 안드로이드 권한 요청 및 얻기에 대한 정리 입니다. 

 

권한 설정

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"/>
    ...이하 생략

 

권한 확인

ContextCompat.checkSelfPermisson() 메서드 이용해서 권한 확인을 합니다. 

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permisson.SMS_READ) ==
 	PackageManager.PERMISSION_GRANTED 
 ContextCompat.checkSelfPermission() 메서드는 권한이 있는 경우, PERMISSION_GRANTED를 반환하고 없는 경우는 PERMISSION_DINIED를 반환 합니다. 

 

권한 요청

ActivityCompat.shouldShowRequestPermissionRationale() 메서드 이용 : 유저에게 권한을 요청할때, 그 권한이 필요한 이유를 유저에게 설명 해주려고 할때 사용하는 메서드 입니다. 

//권한 확인후, 거부했으면 토스트 메시지띄우기 
if(ActivityCompat.shouldShowRequestPermissionRationale(this , 
	android.Manifest.permission.ACCESS_FINE_LOCATION))
    {
		Toast.makeText(this, "앱을 실행하려면 위치 권한이 필요합니다.", Toast.LENGTH_LONG).show()
    }
//앱에 필요한 권한을 사용자에게 요청하는 시스템 Activity 를 띄우기
	ActivityCompat.requestPermissions(
    	this, 
        arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
        REQUEST_LOCATION_PERMISSION_CODE) //프로그래머가 설정한 상수값, 권한요청 응답처리시 사용
                                          //Companion object로 처리 
}

ActivityCompat.shouldShowRequestPermissionRationale() 메서드는 사용자가 거부를 했을때 true를 반환 합니다. 

 

권한 요청 응답처리 

@ override public void onRequestPermissionResult 메서드 이용 : 사용자 응답을 전달 합니다. 

@override
public void onRequsetPermissionResult(int requsetCode,String permissions[], int[] grantResults) 
{
	switch(requestCode){
    	case REQUEST_LOCATION_PERMISSION_CODE: {
        //requset 가 취소 되면, result 어레이는 empty 입니다. 
        if(grantResults.length > 0 && grantResults[0] == PackgeManager.PERMISSION_GRANTED)
        {
        	Toast.makeText(this, "승인 허가",Toast.LENGTH_LONG).show()
        } else {
        	Toast.makeText(this, "승인 거부",Toast.LENGTH_LONG).show()
        }
        return ;
     }
}
                                      
onRequestPermissionResult 함수는 오버라이드 해야합니다. 

권한 재확인 안하기 위한 코드 

@SuppressLint("MissingPermission")

 

 

이상 입니다. 

반응형