IT 관련,,/안드로이드(java, kotlin등등) 관련 내용

[android/개발자]안드로이드 api23이상, 권한 요청 해주기~

IT깡패's 2019. 7. 28. 17:07
728x90
반응형
SMALL

안녕하세요 IT깡패's입니다~ 오랜만에 돌아왔는데요~

요번시간은 안드로이드 권한 체크에 대한 이야기를 해보죠,, ㅇㅅㅇ;

안드로이드를 사용하려면 api가 필요한데요~

요새는 마시멜로우 6.0버젼 이상이면, 권한 체크를 해주는 게 필수일 정도로 중요하다고 하는데요~

즉, 이 버젼은 api23이상 버젼이라는 말이죠~

이전 5.5 버전 이하인 kitkat정도되는 api일 경우에는 사용할 필요가 없었습니다.

그런데 요새는 하도 새롭게 안드로이드를 넘어서 코틀린까지 사용하다 보니 권한을 체크해주는 게 필요해 보입니다.

 

이는 ios도 꼭 필요하고 안드로이드 마찬가치입니다~ㅎㅎ;;

먼저, 안드로이드 권한을 사용할 수 있게끔 AndroidManifest.xml을 추가합니다.

 

이제 실제로 코드를 사용하는 시점에서 권한을 체크하는 코드를 넣어야 합니다~ㅎㅎㅎ

해당 권한이 현재 허용 되어 있는가를 확인 하는 함수는 checkSelfPermission(String permission) 함수를 이용하여

체크할 수 있게 됩니다.

if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    Log.v(TAG,"Permission is granted");
    return true;
}

 

해당 함수는 주어진 권한을 체크하여 해당 퍼미션이 허용 되어있는지 (PackageManager.PERMISSION_GRANTED)

허용되어 있지 않은지 (PackageManager.PERMISSION_DENIED) 반환 하게 되죠~

그리고 체크 결과 퍼미션이 허용 되어 있지 않다면,, 유저에게 허용 해 달라고 팝업 메시지를 보내도록 해야됩니다~

ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

 

requestPermissions 를 이용하여 권한을 요청하게 되면. 해당 함수는 즉시 리턴하며, 해당 팝업의 응답 결과는,,

onRequestPermissionsResult 함수를 호출 하게 되며 따라서 해당 함수를 오버 라이딩 하여 응답 처리를 해야 합니다.

하여 최종적으로는 아래와 같은 코드로 구성됩니다~

boolean isGrantStorage = grantExternalStoragePermission();

if(isGrantStorage){
// 일반처리.
}



private boolean grantExternalStoragePermission() {
    if (Build.VERSION.SDK_INT >= 23) {

        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        }else{
            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

            return false;
        }
    }else{
        Toast.makeText(this, "External Storage Permission is Grant", Toast.LENGTH_SHORT).show();
        Log.d(TAG, "External Storage Permission is Grant ");
        return true;
    }

}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (Build.VERSION.SDK_INT >= 23) {
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
    }
    }
}

 

<참고링크>

https://toepic.fail/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%A7%88%EC%89%AC%EB%A9%9C%EB%A1%9C%EC%9A%B0-%EB%B2%84%EC%A0%84-%EC%9D%B4%EC%83%81%EC%97%90%EC%84%9C-%EA%B6%8C%ED%95%9C%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0-95527b99aafb

728x90
반응형
LIST