1. 程式人生 > >Android6.0哪些許可權要動態申請?

Android6.0哪些許可權要動態申請?

在Adroid系統6.0以前,許可權的處理是在App安裝時授權,授權完了才能完成相關的安裝。而在6.0的系統上,是先安裝App,在安裝完之後,在使用相關許可權的操作時,才會彈出許可權的提示框,使用者同意授權之後才能正常使用。谷歌這樣做,可以讓使用者更加清醒的認識相關許可權的使用,在一定程度上更加人性化和保護了使用者的隱私。

谷歌官方將許可權分為了兩類,一個是正常許可權(Normal Permissions),這類許可權不涉及使用者隱私,是不需要使用者進行授權的,比如訪問網路,手機震動等。還有一類是危險許可權(Dangerous Permissions),一般是涉及到使用者隱私的,需要使用者進行授權,比如操作SD卡的寫入,相機,錄音等。

Normal Permissions:

ACCESS_LOCATION_EXTRA_COMMANDS

ACCESS_NETWORK_STATE

ACCESS_NOTIFICATION_POLICY

ACCESS_WIFI_STATE

BLUETOOTH

BLUETOOTH_ADMIN

BROADCAST_STICKY

CHANGE_NETWORK_STATE

CHANGE_WIFI_MULTICAST_STATE

CHANGE_WIFI_STATE

DISABLE_KEYGUARD

EXPAND_STATUS_BAR

GET_PACKAGE_SIZE

INSTALL_SHORTCUT

INTERNET

KILL_BACKGROUND_PROCESSES

MODIFY_AUDIO_SETTINGS

NFC

READ_SYNC_SETTINGS

READ_SYNC_STATS

RECEIVE_BOOT_COMPLETED

REORDER_TASKS

REQUEST_INSTALL_PACKAGES

SET_ALARM

SET_TIME_ZONE

SET_WALLPAPER

SET_WALLPAPER_HINTS

TRANSMIT_IR

UNINSTALL_SHORTCUT

USE_FINGERPRINT

VIBRATE

WAKE_LOCK

WRITE_SYNC_SETTINGS

Dangerous Permissions:


 group:android.permission-group.CONTACTS
    permission:android.permission.WRITE_CONTACTS
    permission:android.permission.GET_ACCOUNTS    
    permission:android.permission.READ_CONTACTS

  group:android.permission-group.PHONE
    permission:android.permission.READ_CALL_LOG
    permission:android.permission.READ_PHONE_STATE 
    permission:android.permission.CALL_PHONE
    permission:android.permission.WRITE_CALL_LOG
    permission:android.permission.USE_SIP
    permission:android.permission.PROCESS_OUTGOING_CALLS
    permission:com.android.voicemail.permission.ADD_VOICEMAIL

  group:android.permission-group.CALENDAR
    permission:android.permission.READ_CALENDAR
    permission:android.permission.WRITE_CALENDAR

  group:android.permission-group.CAMERA
    permission:android.permission.CAMERA

  group:android.permission-group.SENSORS
    permission:android.permission.BODY_SENSORS

  group:android.permission-group.LOCATION
    permission:android.permission.ACCESS_FINE_LOCATION
    permission:android.permission.ACCESS_COARSE_LOCATION

  group:android.permission-group.STORAGE
    permission:android.permission.READ_EXTERNAL_STORAGE
    permission:android.permission.WRITE_EXTERNAL_STORAGE

  group:android.permission-group.MICROPHONE
    permission:android.permission.RECORD_AUDIO

  group:android.permission-group.SMS
    permission:android.permission.READ_SMS
    permission:android.permission.RECEIVE_WAP_PUSH
    permission:android.permission.RECEIVE_MMS
    permission:android.permission.RECEIVE_SMS
    permission:android.permission.SEND_SMS
    permission:android.permission.READ_CELL_BROADCASTS

解決方法

看完官方文件,還好解決方案還不是太難,也不是非常麻煩,當然和以前相比還是有一點繁瑣的。廢話不多說了,解決方案如下。

檢查系統版本

private boolean canMakeSmores(){

    return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);

}

檢查系統版本的原因,顯而易見,如果是系統6.0及以上的,需要採用新的許可權授權方法。

申請授權

舉個例子,如果你需要拍照操作,那麼你就應該在拍照操作的地方,先加上許可權申請授權。方式如下:

String[] perms = {"android.permission.CAMERA"};

int permsRequestCode = 200; 

requestPermissions(perms, permsRequestCode);

授權回撥處理

@Override

public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){

    switch(permsRequestCode){

        case 200:

            boolean cameraAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;
            if(cameraAccepted){
                //授權成功之後,呼叫系統相機進行拍照操作等
            }else{
                //使用者授權拒絕之後,友情提示一下就可以了
            }

            break;

    }

}

進一步處理和完善

通過上面可以看出,只檢查系統版本了,如果授權過的許可權,還需要再次去授權麼?我們的判斷其實可以更完善一下,比如:

private boolean hasPermission(String permission){

    if(canMakeSmores()){

        return(checkSelfPermission(permission)==PackageManager.PERMISSION_GRANTED);

    }

    return true;

}