티스토리 뷰
이전에서 브로드 캐스트를 사용하면 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에서 보낸 요청코드가 맞는지 확인하고, 권한을 사용자가 수락했는지 최종적으로 확인한다.
'Android > 정리' 카테고리의 다른 글
이벤트 처리 (0) | 2016.06.08 |
---|---|
알림 대화상자 띄우기 (0) | 2016.05.28 |
안드로이드 구성요소(서비스) (0) | 2016.05.24 |
수명주기 테스트 코딩 그리고 SharedPreferences인터페이스 (0) | 2016.05.24 |
액티비티 라이프사이클(수명주기) (0) | 2016.05.17 |