일반 권한과 위험 권한
기본적으로 특정 권한을 획득하기 위해서는 Manifest에 요청할 권한을 추가하기만 하면 된다.
예전에는 이런 권한들을 앱 설치 수락 과정에서 모두 획득이 가능했는데,
사용자들로부터 위험한 권한들을 너무 쉽게 획득한다고 판단되어 Marshmallow(API 23) 버전 이후로 분리되었다.
일반 권한들은 기존처럼 앱 설치 시에 보여주어 수락 시에 획득이 가능하게 되고,
위험 권한들은 앱 설치 시 뿐만 아니라 앱 실행 후에 한번 더 동의를 얻어야 획득이 가능하다.
따라서 위에 표시된 위험 권한들은 앱 실행 후 동의를 얻어야 사용이 가능하다.
위험 권한 획득 방법
SMS 수신 권한 획득 과정을 구현해보자.
package com.juhy.myapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] permissions = {Manifest.permission.RECEIVE_SMS};
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS);
if(permissionCheck == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "SMS 수신 권한 주어져 있음", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "SMS 수신 권한 없음", Toast.LENGTH_SHORT).show();
if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECEIVE_SMS)){
Toast.makeText(this, "SMS 권한 설명 필요함", Toast.LENGTH_SHORT).show();
} else {
ActivityCompat.requestPermissions(this, permissions, 1);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch(requestCode){
case 1:
if(grantResults.length > 0){
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "SMS 수신 권한 동의함", Toast.LENGTH_SHORT).show();
} else if(grantResults[0] == PackageManager.PERMISSION_DENIED) {
Toast.makeText(this, "SMS 수신 권한 거부함", Toast.LENGTH_SHORT).show();
}
} else{
Toast.makeText(this, "SMS 수신 권한 획득 실패", Toast.LENGTH_SHORT).show();
}
}
}
}
권한 획득 과정은 기기의 현재 상태와 사용자의 응답에 따라 조건문으로 나뉘게 된다.
이 과정을 경우에 따라 나누어 보면 다음과 같다.
1. 권한 확인
1-1. 권한이 있을 경우
1-2. 권한이 없을 경우
1-2-1. 권한 설명이 필요한 경우 (이전에 한번 거절되었을 경우)
1-2-2. 권한 획득 요청
2. 사용자 응답 확인
2-1. 사용자가 동의했을 경우
2-2. 사용자가 거부했을 경우
2-3. 기타 오류로 획득에 실패한 경우
이 조건문들을 활용하여 상황에 따라 적절한 위치에 원하는 기능을 넣으면 된다.
Reference
[부스트코스]안드로이드 프로그래밍
'Android > Concepts' 카테고리의 다른 글
ActionBar에 Menu 추가하기 (0) | 2020.04.13 |
---|---|
Fragment 사용법 (0) | 2020.04.09 |
Broadcast Receiver를 이용한 SMS 수신 (3) | 2020.04.04 |
Service의 기본적인 사용법 (0) | 2020.04.03 |
Activity Lifecycle(수명주기)란? (0) | 2020.04.03 |