이것저것/My_Work

[안드로이드6.0 권한] Marshmallow 권한 획득

우담바라 2016. 4. 8. 16:49



가끔 안드로이드 소스를 접하고있는데...


기존에 만들어뒀던 코드가 


내폰에서 갑작스레 에러를 토하면서 진행이 되지 않았다;;



관련 부분을 살펴보니...


안드로이드 6.0 마시맬로부터


기존에 그냥 사용하던 몇몇 권한을


사용자에게 요청하여 승인 받아서 진행하도록 되어있었다.



관련 부분을 간단하게 정리해두고자 한다.



샘플코드 : https://github.com/taehwandev/MAppPermission





권한 관련해서 꼭 필요한 API


<해당 권한이 현재 사용가능여부 확인>

ContextCompat.checkSelfPermission(this, Manifest.permission.권한코드)  != PackageManager.PERMISSION_GRANTED



<해당 권한의 필요를 설명하는 코드 (사용자에게)>

ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.권한코드)



<권한 획득!>

 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_PHONE_STATE},권한 요청 코드);







기본적으로 AndroidManifest.xml은 동일하게 필요로 하는 권한 요청 코드를 입력(버전과 상관없이...)





[참고로, 난 메인Activity에서 권한을 요청/사용하였음.]


cf) 'READ_PHONE_STATE' 권한 요청 사용


private void checkPermission() {


if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)  != PackageManager.PERMISSION_GRANTED) {


//            // 사용자에게 권한 필요 설명이 필요한 경우

//            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {

//                // Explain to the user why we need to write the permission.

//                Toast.makeText(this, "나는 이권한이 꼭 필요합니다~! ", Toast.LENGTH_SHORT).show();

//            }


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


        } else {


//코드 작성


        }

}



권한 처리 요청후, 사용자 선택에 따라 호출되는 함수

    @Override

    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {


   //허용의 경우

        if (requestCode == PERMISSIONS_REQUEST_READ_PHONE_STATE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

// 실행 할 코드 


   //거절의 경우

        }else{

// 실행 할 코드 

        }

    }