티스토리 뷰

이전에서 브로드 캐스트를 사용하면 SMS를 수신할 때 onReceive()메서드가 호출됨을 알 수 있었다. 그러나 마시멜로 버전 부터는 권한 문제로 인해 onReceive()메서드가 호출 되지 않는다.


기존에는 권한이 일반 권한 뿐이었지만, 마시멜로 부터 일반권한과 위험권한 두 그룹으로 나뉘게 됐다. 위험권한에 대해서는 애플리케이션 실행 시에 해당 권한을 부여 받도록 변경되었다.


(마시멜로)6.0 미만 버전에서는AndroidManifest.xml에 권한을 설정하는 것만으로 영구적으로 애플리케이션의 권한을 설정할 수 있었지만, 6.0 이상에서는 애플리케이션 실행 시에 권한을 일일이 획득해야 한다.


다음은 위험권한에 대한 그룹과 세부권한이다.

Dangerous Permission Group

Permissions

CALENDAR

- READ_CALENDAR

- WRITE_CALENDAR

CAMERA

- CAMERA

CONTACTS

- READ_CONTACTS

- WRITE_CONTACTS

- GET_ACCOUNTS

LOCATION

- ACCESS_FINE_LOCATION

- ACCESS_COARSE_LOCATION

MICROPHONE

- RECORD_AUDIO

PHONE

- READ_PHONE_STATE

- CALL_PHONE

- READ_CALL_LOG

- WRITE_CALL_LOG

- ADD_VOICEMAIL

- USE_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




마시멜로에서의 권한 획득 과정은 대략 이렇다.


1. 이미 권한을 가지고 있는지 체크한다.


2. 권한이 없다면 권한을 요청한다.


3. 권한을 승인 했는지 확인한다.

//ContextCompat 클래스 int checkSelfPermission(Context context, String permission); //ActivityCompat 클래스 boolean shouldShowRequestPermissionRationale(Activity activity, String permission); void requestPermissions(final Activity activity, final String[] permissions, final int requestCode) @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults);

checkSelfPermission메서드

권한이 부여되어 있는지 확인하는 메서드이다.

권한이 부여되어 있다면 반환값이 0이고, 부여되어 있지 않다면 반환값이 -1이다.

PackageManager클래스에 PERMISSION_GRANTED가 가지고 있는 값이 0이고,

PERMISSION_DENIED가 가지고 있는 값이 -1이다.




shouldShowRequestPermissionRationale메서드

권한을 요청하는 창이 뜰 때 거절을 누르면 true를 반환하는 메서드이다.

그렇기 때문에 true가 되면 왜 이 권한을 얻어야 하는지와 같은 설명을 보여주는 메세지를 보여줘야 한다.




requestPermissions메서드

권한이 없을 때 권한을 부여할 것인지. 창을 띄워주는 메서드이다.

권한 부여 창은 이 메서드를 호출 했을 때 자동적으로 안드로이드 시스템에서 띄워준다.




onRequestPermissionsResult메서드

requestPermissions메서드의 후 처리를 위한 메서드이다.

requestPermissions에서 보낸 요청코드가 맞는지 확인하고, 권한을 사용자가 수락했는지 최종적으로 확인한다.




Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday