Android6.0哪些权限要动态申请?

在Adroid系统6.0之前,权限的处理是在App安装时受权,受权完了才能完成相关的安装。而在6.0的系统上,是先安装App,在安装完以后,在使用相关权限的操做时,才会弹出权限的提示框,用户赞成受权以后才能正常使用。谷歌这样作,可让用户更加清醒的认识相关权限的使用,在必定程度上更加人性化和保护了用户的隐私。android

谷歌官方将权限分为了两类,一个是正常权限(Normal Permissions),这类权限不涉及用户隐私,是不须要用户进行受权的,好比访问网络,手机震动等。还有一类是危险权限(Dangerous Permissions),通常是涉及到用户隐私的,须要用户进行受权,好比操做SD卡的写入,相机,录音等。网络

Normal Permissions:

ACCESS_LOCATION_EXTRA_COMMANDSide

ACCESS_NETWORK_STATEui

ACCESS_NOTIFICATION_POLICYspa

ACCESS_WIFI_STATEcode

BLUETOOTHorm

BLUETOOTH_ADMIN文档

BROADCAST_STICKYit

CHANGE_NETWORK_STATEio

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;

}
相关文章
相关标签/搜索