Android 6.0 运行时权限处理

而在6.0以后,我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝

Google将权限分为两类,
一类是Normal Permissions,
另一类是Dangerous Permission

Normal Permissions如下

这类权限一般不涉及用户隐私,是不需要用户进行授权的
AndroidManifest.xml申请即可

> 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  

可以通过adb shell pm list permissions -d -g进行查看。


检查权限

if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {
}else{
    //
}

申请授权

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

当返回DENIED就需要进行申请授权了。

处理权限申请回调

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }
    }
}

用户已经拒绝一次了,你又弹个授权框

// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
        Manifest.permission.READ_CONTACTS)) 
    // Show an expanation to the user *asynchronously* -- don't block
    // this thread waiting for the user's response! After the user
    // sees the explanation, try again to request the permission.

}

//TODO 上传GitHub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值