-
마시멜로 권한 획득하기Android 2016. 3. 22. 15:29Android M 프리뷰에서는 퍼미션에 대한 변경사항이 있다.
아마 해킹에 취약한 안드로이드의 오명으로 인해 보안을 강화하려는 의도로 보인다.
1) PROTECTION_NORMAL을 제외한 퍼미션의 경우, 접근 직전에 권한을 요구하도려록 변경
PROTECTION_NORMAL 로 분류된 퍼미션은 다음과 같다.
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.PERSISTENT_ACTIVITY
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.READ_USER_DICTIONARY
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SETTINGS
android.permission.WRITE_SYNC_SETTINGS
android.permission.WRITE_USER_DICTIONARY
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
2) 퍼미션 정책 변경에 따른 동작
새로운 퍼미션 정책이 적용 안된 기존 앱에 대해서는 Crash가 가급적 발생하지 않도록 Exception대신 비어있는
데이터를 반환.
새 퍼미션 모델을 문제없이 사용하기 위해서는 퍼미션이 이미 있는지 확인하는 checkSelfPermission,
없을 시 요청하는 requestPermission,
참조 : http://developer.android.com/preview/features/runtime-permissions.html#normal
권한 획득을 위한 주요 API
========================
안드로이드 M Preview의 예제코드 중 주요 코드를 살펴보겠습니다.
권한 획득하기 전 권한 유효성 체크
checkSelfPermission(String) != PackageManager.PERMISSION_GRANTED
위와 가은 코드를 통해 허용돼 사용 가능한지 불가능한지에 대한 permission을 체크할 수 있습니다.
현재 API에서는 아쉽게도 1번에 1개밖에 하지 못하는군요.
설명이 필요할 경우 처리
shouldShowRequestPermissionRationale(String)
권한 획득이 필요한 이유를 설명해야 한다면 다음 옵션을 추가하여 별도 처리가 가능합니다.
권한 획득을 위한 API
Activity.requestPermissions(String[], int)
위의 권한 중 Group과 permission 2가지를 선택적으로 던질 수 있습니다.
한 번에 1개가 아닌 String[] 배열로 넘겨 한 번에 필요한 permission을 한 번에 획득할 수 있습니다.
requestPermission의 경우 callback으로 return 됩니다.
onRequestPermissionResult(int, String[], int[])
권한 획득에 대한 성공/실패에 대한 정보를 담은 callback입니다.
다음 함수 내에서 배열로 전달되므로 필요한 퍼미션이 잘 받아졌는지 확인하여 이후 처리가 가능합니다.'Android' 카테고리의 다른 글
TitleBar 없애기 (0) 2017.03.17 NDK 테스트하기 (0) 2016.03.07 볼륨 조절하기 (0) 2015.08.18 암시적 인텐트 사용 (0) 2015.07.23 댓글