Android动态请求权限

一般开发项目的时候,如果需要某些权限,如网络,获取wifi信息等。需要在AndroidManifest.xml通过uses-permission标签设置对应权限参数,如设置网络权限,需要在AndroidManifest.xml中加入如下内容:



    
    
  ....
  

这样就能进行网络访问了,但是这种获取权限的方式并不能一劳永逸,不说某些权限需要动态获取,而且部分手机可能对系统权限进行了控制管理,这样就造成了即使在AndroidManifest.xml中添加了权限参数,APP也不能成功获取权限。在这种情况下,就需要动态请求权限了。

一、动态获取权限

Android动态获取权限的代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.权限参数) != PackageManager.PERMISSION_GRANTED) {
        // 检查权限状态
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.权限参数)) {
             //  用户彻底拒绝授予权限,一般会提示用户进入设置权限界面
        } else {
            //  用户未彻底拒绝授予权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.权限参数}, 1);
        }
    }
}

当应用运行到这段代码是,会弹出一个提示框提示用户需要获取对应的权限,如果用户点击了允许,则以后运行应用都会默认允许获取该权限。而如果用户点击了拒绝,则以后运行应用都会默认禁止获取该权限,除非用户在设置界面修改应用权限。

二、监听权限申请结果

上述代码仅能实现动态申请权限,如果需要监听申请权限结果,需要覆写Activity的onRequestPermissionsResult方法:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        for (int i = 0; i < permissions.length; i++) {
            if (grantResults[i] == PERMISSION_GRANTED) {
                // 申请成功
            } else {
                // 申请失败
            }
        }
    }
}

参考博客:
Android 6.0(API 23)及其以上动态申请的权限与申请权限的方法

你可能感兴趣的:(Android动态请求权限)