개발자의 끄적끄적

[android] Dangerous Permission 본문

개발/android & ios

[android] Dangerous Permission

효벨 2020. 7. 19. 02:00
728x90
반응형

[android] Dangerous Permission

 

 

위험 권한 : Dangerous Permission

 

 

1. 일반 권한, 위험 권한 무슨 차이일까?

 

안드로이드의 권한 종류는 약 140개입니다. (안드로이드 권한 종류 보기)

 

이전에는 권한이라 하면 AndroidManifest.xml 파일에서 단순하게 권한을 주는 작업을 생각합니다. 마시멜로 이전 버전까지는 이러한 처리만으로 권한 설정이 끝났습니다. 하지만 마시멜로(API 23) 버전부터는 일반 권한과 위험 권한으로 나누어져 관리가 됩니다. 

 

일반 권한의 경우 이전과 같이 uses-permission 속성만 추가하면 사용할 수 있는 권한입니다.

하지만 위험 권한은 일반 권한과 달리 사용자의 개인정보가 담겨있는 정보에 접근하거나 개인정보를 만들어 낼 수 있는 단말의 주요 장치에 접근하는 경우에 부여되는 권한으로 사용자가 직접 권한 하나하나 체크하고 승낙해야 어플이 작동되도록 하는 권한입니다.

 

 

[출처] Do it! 안드로이드 앱 프로그래밍

 

이 둘의 차이점은 권한 허용을 사용자에게 물어보는 시점에 있습니다.

 일반 권한의 경우 앱을 설치할 시점에 물어보게 됩니다. 보통 사람들은 앱을 설치할 때 이러한 권한에 대해 별로 신경 쓰지 않고 설치하였기 때문에 과거의 단말들은 이러한 앱들에 의해 굉장히 노출되어있었습니다.

 하지만 위험권한은 앱을 실행할 때 생성되는 권한으로 앱을 실행하기 위해 필요한 위험 권한 하나하나 사용자가 읽어보고 수락해야 합니다. 만약 사용자가 하나라도 수락하지 않는다면 앱을 실행할 수 없는 것이죠.

 

 

 

2. 위험 권한에는 어떤 것들이 있을까?

 

참고 - 안드로이드 Developers

허가 그룹권한

CALENDAR  
CALL_LOG
CAMERA
CONTACTS
LOCATION
MICROPHONE
PHONE
SENSORS
SMS
STORAGE

 

위 표를 보시면 어떤 것들이 위험 권한에 들어갈지 감이 올 거라 생각합니다.

대부분 개인정보와 관련된 것들이 위험 권한으로 설정되어 위치, 카메라, 마이크, 연락처, 전화, 문자, 일정, 센서 등입니다.

 

앞서 우리가 본 SMS도 위험 권한에 포함되어 있다는 것을 알 수 있습니다. 

그렇다면 우리는 SMS 문자메시지를 받는 권한을 사용하면 되는 것이므로 RECEIVE_SMS를 이용하여 위험 권한을 설정하면 되는 것입니다.

 

 

 

 

3. SMS 권한 설정을 통해 위험 권한 설정법을 알아보자.

 

앞서 브로드캐스트 리시버에서 작성한 SMS 권한 설정을 통해 알아 보도록 하겠습니다.

 

일단 onCreate() 메소드에서 다음과 같은 코드를 작성했습니다.

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);

}

 

- checkSelfPermmision()

 : 일단 해당 단말기에서 이 앱에 대한 SMS 권한을 가지고 있는지 체크하는 메소드입니다. 앱을 실행할 때마다 권한 체크를 한다면 상당히 불편하겠죠.

 

- PERMISSION_GRANTED

 : 사용자가 해당 앱에 권한을 수락했는지 나타내는 상수 값입니다.

 

- requestPermissons() 

 : 만약 단말기에서 앱에 대한 SMS 권한을 가지고 있지 않다면 권한 요청을 위한 대화상자를 호출합니다. 이때 대화상자는 시스템에서 자동으로 만들어 띄워주기 때문에 사용자가 선택하는 값에 따라 처리만 해주면 됩니다.

 

 

그다음 onRequestPermissionsResult() 메소드를 오버라이드하여 재정의했습니다.

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

if(requestCode ==1 ){
if (grantResults.length>0) {
grantResults[0] = PackageManager.PERMISSION_GRANTED;
Toast.makeText(getApplicationContext(), "SMS 권한을 사용자가 승인함.",Toast.LENGTH_LONG).show();
} else{
Toast.makeText(getApplicationContext(), "SMS 권한을 사용자가 거부함.",Toast.LENGTH_LONG).show();
}
}

}

 

-  onRequestPermissionsResult()

 :   requestPermissons() 메소드에서 호출한 대화상자에서 사용자가 선택한 값이 이 메소드로 전달되어 자동으로 실행됩니다. 만약 SMS 권한뿐만 아니라 다른 권한도 같이 요청한다면 greatResults 배열 변수 안에 순차적으로 사용자의 선택 값이 전달됩니다.

 

 

정상적으로 권한 요청 설정이 완료되었다면 해당 앱을 실행할 때 초기화면으로 다음과 같이 출력될 것입니다~

 

출처 : https://programmingnote.tistory.com/24

반응형
Comments