런타임 퍼미션 요청

매니페스트 설정파일 내에 퍼미션 추가 이외에
안드로이드 6.0 버전 이상에서 앱이 제대로 실행되기 위해서는 추가 작업이 필요한 퍼미션들이 많이 있음.
그 중 한 가지가 위험(danger)퍼미션임.
[앱이 실행 중일 떄 승인을 요청해야 하는 퍼미션의 개요 알아보기]

○ 퍼미션의 종류
- 보통 퍼미션 : 앱이 설치되는 시점에서 사용자의 승인을 받음
- 위험 퍼미션 : 보통 퍼미션 + 앱이 실행될 때에도 최초 한 번 사용자의 승인을 받음(=런타임 퍼미션)
=>  보통 퍼미션과 위험 퍼미션은 매니페스트 파일에 선언해야 함.

○ 위험 퍼미션(사용자의 사생활 침해 방지 하기 위해 안전 장치를 추가한 것)
퍼미션 그룹 
퍼미션 
Calendar 
READ_CALENDAR, WRITE_CALENDAR 
Camera 
CAMERA 
Contacts 
READ_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTS 
Location 
ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION 
Microphone 
RECORED_AUDIO 
Phone 
READ_PHONE_STATE, CALL_PHONE, READ_CALL_LOG,
WRITE_CALL_LOG, ADD_VICEMAIL, USER_SIP,
PROCESS_OUTGOING_CALLS 
Sensors 
BODY_SENSORS 
SMS 
SEND_SMS, RECEIVE_SMS, READ_SMS, RECEIVE_WAP_PUSH, RECEIVE_MMS 
Storage 
READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE 



○ 퍼미션 확인
퍼미션을 사용하기 앞서, 해당 퍼미션이 승인되었는지 먼저 확인 해야함.
= ContextCompat 클래스의 checkSelfPermission() 메서드를 호출 + 현재 액티비티의 참조와 요청하는 퍼미션을 인자로 전달.
  그러면 이 메서드에서 해당 퍼미션의 승인 여부를 확인한 후, 정숫값이 PackageManager.PERMISSION_GRANTED 또는 PackageManager.PERMISSION_DENIED를 반환


○ 런타임 시에 퍼미션 요청하기
- 런타임 시의 퍼미션 요청은 ActivityCompat 클래스의 requestPermissions() 메서드를 호출하여 처리.
  이 메서드가 호출될 때는 퍼미션 요청이 비동기 작업으로 처리되고, 그 작업이 끝나면 onRequestPermissionsResult() 메서드가 호출됨.
- requestPermissions() 메서드는 세 개의 인자를 받음.(현재 액티비티의 참조, 요청 퍼미션의 식별자, 요청 코드)
○ 퍼미션 요청 이유 제공하기
- 요청 대화상자가 사용자에게 보이기 전(해당 퍼미션을 이전에 거절한 적이 있을 때)에 별도의 대화상자에 퍼미션 요청 설명을 포함시켜 보여주기 : 
  ActivityCompat 클래스의 shouldShowRequestPermissionRationale() 메서드로 식별

※ 안드로이드 6.0 이전 버전에서는 퍼미션 요청 시 메니페스트 파일에만 추가하면 되었음 
   ->
   안드로이드 6.0 이상 버전에서도 퍼미션 요청 시 6.0 이전 버전에서와 동일하지만 런타임 시에도 퍼미션 요청을 해야 함.

댓글