[Android]Permission

0

안드로이드

목록 보기
3/19

안드로이드 개발을 하다가 Manifast에 이런것들 많이 봤을것이다.

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

이러한 것들은 외부의 허가없는 접근으로 부터 보호하는 기능이다.
위의 것들은 Nomal 과 Danger가 섞여있지만, 사용하는 모든 Permission들은
전부 Manifast에 등록해줘야 한다.

이러고 난뒤, Android 6.0 에서는 Dangerous 쪽에 관한 Permission 은 사용자 승인을 받아야 한다.

Permission 종류는 여기 <-

Permission 체크

SMS 권한 설정을 통해 위험 권한 설정법을 알아보자.
int permissionChceked = ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS);
if(permissionChceked == PackageManager.PERMISSION_GRANTED){
    Toast.makeText(getApplicationContext(), "SMS 수신권한 있음.",Toast.LENGTH_LONG).show();
}else {
    Toast.makeText(getApplicationContext(), "SMS 수신권한 없음.",Toast.LENGTH_LONG).show();
    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECEIVE_SMS},1);
}

ContextCompat.checkSelfPermission을 통해 권한을 획득하고, PackageManager를 통해 분기를 가를수있는데 PackageManager 이녀석이 Enum 비스무리하게 되어있다.

    public static final int PERMISSION_DENIED = -1;
    public static final int PERMISSION_GRANTED = 0;

그렇기에 분기를 통해서, 아닐경우에 승인을 받지않았다는것이고 체크하게 만들어줘야한다.

else {  //2. 퍼미션 요청을 허용한 적이 없다면 퍼미션 요청이 필요합니다. 2가지 경우(3-1, 4-1)가 있습니다.
      	// 3-1. 사용자가 퍼미션 거부를 한 적이 있는 경우에는
	if (ActivityCompat.shouldShowRequestPermissionRationale(this,REQUIRED_PERMISSIONS[0])
                        || ActivityCompat.shouldShowRequestPermissionRationale(this, REQUIRED_PERMISSIONS[1])) {
                        
                    // 3-2. 요청을 진행하기 전에 사용자가에게 퍼미션이 필요한 이유를 설명해줄 필요가 있습니다.
                    Snackbar.make(mLayout, "이 앱을 실행하려면 카메라와 외부 저장소 접근 권한이 필요합니다.",
                            Snackbar.LENGTH_INDEFINITE).setAction("확인", new View.OnClickListener() {

                        @Override
                        public void onClick(View view) {

                            // 3-3. 사용자게에 퍼미션 요청을 합니다. 요청 결과는 onRequestPermissionResult에서 수신됩니다.
                            ActivityCompat.requestPermissions( MainActivity.this, REQUIRED_PERMISSIONS,
                                    PERMISSIONS_REQUEST_CODE);
                        }
                    }).show();
                } else {
                    // 4-1. 사용자가 퍼미션 거부를 한 적이 없는 경우에는 퍼미션 요청을 바로 합니다.
                    // 요청 결과는 onRequestPermissionResult에서 수신됩니다.
                    ActivityCompat.requestPermissions( this, REQUIRED_PERMISSIONS,
                            PERMISSIONS_REQUEST_CODE);
                }

여기서 한번 어떤 메소드를 호출햇는지 읽어보자

읽어볼 자료

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글