본문 바로가기
IT 개발/안드로이드개발

[안드로이드] 권한요청/ 권한설정, 퍼미션체크

by 만능이되고픈 잡캐 2018. 10. 9.


[안드로이드] 권한요청 및 권한체크하기 (마시멜로우6.0이상 필수)


안녕하세요. 오늘은 안드로이드 권한요청과 권한체크를 만들어주는 부분을 포스팅 할거에요!
마시멜로우6.0 이전버전엔 사용자가 알지도 못하는 상황에 권한을 다 부여해서 개인정보 유출에 관한 이슈들이 상당히 많았어요. 
그래서 그 이후로는 개발할 때 개발자들도 꼭!! 인지하고 있어야하는 권한체크!에 대해 알려드릴게요.




1. 권한 설정하기


먼저, 권한을 설정해주기 위해서는 AndroidManifest.xml에 권한등록을 해주어야 해요.
권한은 모두 사용자의 동의가 필요한 것이아니라 위험한 권한들만 동의가 필요해요.

[AndroidManifest.xml]
<uses-permission android:name="android.permission.CAMERA"/>

2. 권한 확인


개발하는 앱이 위험 권한이 필요한 경우에는 해당 앱을 들어갈때마다 앱에서 체크를 해주어야해요.
사용자가 권한을 다시 거부했을 수도 있기 때문이죠.
권한 보유 여부를 확인하는 방법은 ContextCompat.checkSelfPermission()메서드를 사용하는 것이에요.
int permssionCheck = ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA);
앱에 권한이 있는 경우 이 메서드는 PackageManager.PERMISSION_GRANTED를 반환하고,
권한이 없는 경우 PERMISSION_DENIED를 반환해요.

3. 권한 요청


사용자에게 권한을 요청할 때는 그 권한이 필요한 이유를 사용자에게 설명해주어야해요.
그러기 위해서는 shouldShowRequestPermissionRationale()메서드를 사용하면 되요.
이 메서드는 사용자가 거부를 했을 때 true를 반환해요.
if (ContextCompat.checkSelfPermission(this,
         Manifest.permission.CAMERA)
          != PackageManager.PERMISSION_GRANTED) {

         if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.CAMERA)) {
         } else {
           ActivityCompat.requestPermissions(this,
              new String[]{Manifest.permission.CAMERA},
              MY_PERMISSIONS_REQUEST_CAMERA);
   }
}
앱에 아직 권한이 없는경우 requestPermissions()메서드를 호출하여 권한 요청을 한 후, 사용자가 대화상자에 응답한 후 결과를 가지고 콜백 메서드를 호출해요.


4. 권한 요청 응답처리


사용자가 응답하면 시스템은 onRequestPermissionResult()메서드를 호출하여 사용자 응답을 전달해요.
    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_CAMERA: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    Toast.makeText(this,"승인이 허가되어 있습니다.",Toast.LENGTH_LONG).show();

                } else {
                    Toast.makeText(this,"아직 승인받지 않았습니다.",Toast.LENGTH_LONG).show();
                }
                return;
            }

        }
    }


5. 전체 예제소스


[MainaActivity.java]
public class MainActivity extends AppCompatActivity {

    private final int MY_PERMISSIONS_REQUEST_CAMERA=1001;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        int permssionCheck = ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA);

        if (permssionCheck!= PackageManager.PERMISSION_GRANTED) {

            Toast.makeText(this,"권한 승인이 필요합니다",Toast.LENGTH_LONG).show();

            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.CAMERA)) {
                Toast.makeText(this,"000부분 사용을 위해 카메라 권한이 필요합니다.",Toast.LENGTH_LONG).show();
            } else {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.CAMERA},
                        MY_PERMISSIONS_REQUEST_CAMERA);
                Toast.makeText(this,"000부분 사용을 위해 카메라 권한이 필요합니다.",Toast.LENGTH_LONG).show();

            }
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_CAMERA: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    Toast.makeText(this,"승인이 허가되어 있습니다.",Toast.LENGTH_LONG).show();

                } else {
                    Toast.makeText(this,"아직 승인받지 않았습니다.",Toast.LENGTH_LONG).show();
                }
                return;
            }

        }
    }
}



꼭! 개발하시기 전에 내가 위험권한을 이용하고 있는지 확인 후 퍼미션 체크를 해주세요!



도움이 되셨다면 공감버튼 한번 씩 부탁드릴게요!