9D4U 2018. 7. 11. 16:33
728x90
반응형

매니페스트 설정파일 내에 퍼미션 추가 이외에

안드로이드 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 이전 버전에서와 동일하지만 런타임 시에도 퍼미션 요청을 해야 함.



728x90