android 6.0权限处理

什么时候需要请求权限

android6.0推出了新的权限管理机制,因为公司项目原因,一直没有进行适配,今天正好碰到一个需要适配的插件,这里记录一下。

谷歌官方上的说法:如果设备运行的是 Android 6.0(API 级别 23)或更高版本,并且应用的 targetSdkVersion 是 23 或更高版本,则应用在运行时向用户请求权限。 也就是说,我们可以把 targetSdkVersion调到23以下就可以避免在运行时请求权限,这个方法有点取巧,而且在某些国产手机上面是行不通的,还得运行时获取权限。

权限分类

6.0把权限分为正常权限、危险权限、特殊权限。
正常权限我们在AndroidManifest.xml声明即可;危险权限必须由用户明确向应用授予该权限;特殊权限,其行为方式与正常权限及危险权限都不同。SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 特别敏感,因此大多数应用不应该使用它们。如果某应用需要其中一种权限,必须在清单中声明该权限,并且发送请求用户授权的 intent。系统将向用户显示详细管理屏幕,以响应该 intent。

权限申请

其实权限申请的过程很简单,这里就直接上代码

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //检测权限
    int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (permissionCheck == PackageManager.PERMISSION_GRANTED){
        //已经获取到了权限
    } else if (permissionCheck == PackageManager.PERMISSION_DENIED){
        //没有获取到权限

        //下面这段代码这样写是为了区分这两个方法的作用
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)){
            //已经向用户请求过一次权限,但是被拒绝,在这里可以向用户解释获取此权限的作用

            //这里依然请求权限
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},100);
        } else {
            //第一次请求权限
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},100);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case 100:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //用户授予了权限
            } else {
                //拒绝了权限
            }
            break;
    }
}

}

权限组

6.0中还有一个权限组的概念,比如读sdcard和写sdcard是一个权限组,我们只要获取了其中一个的权限,那么我们用另一个权限的时候会自动授权
这里写图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值