반응형

Android 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, 

if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (shouldShowRequestPermissionRationale(
            Manifest.permission.READ_CONTACTS)) {
        // Explain to the user why we need to read the contacts
    }

    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
    // app-defined int constant

    return;
}

요청한 결과를 받는 onRequestPermissionsResult 메소드를 사용하여야 함.

@Override

public void onRequestPermissionsResult(int requestCode,

        String permissions[], int[] grantResults) {

    switch (requestCode) {

        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {

            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {


                // permission was granted, yay! do the

                // calendar task you need to do.


            } else {


                // permission denied, boo! Disable the

                // functionality that depends on this permission.

            }

            return;

        }


        // other 'switch' lines to check for other

        // permissions this app might request

    }

}



반응형

+ Recent posts