Android 6.0动态权限获取

 1.概述

  Android 6.0  (API 23)  之前应用的权限在安装时全部授予,运行时应用不再需要

询问用户。在  Android 6.0  或更高版本对权限进行了分类,对某些涉及到用户隐私

的权限需要在运行时根据用户的需要动态授予。这样用户就不需要在安装时被强迫同

意某些权限。

2.  正常权限和危险权限

  Android  系统权限分为几个保护级别。需要了解的两个最重要保护级别是正常权

限和危险权限:

  (1)正常权限:

涵盖应用需要访问其沙盒外部数据或资源,但对用户隐私或其他应用操作风险很小

的区域。这些权限在应用安装时授予,运行时不再询问用户。例如:  网络访问、WIFI

扫描二维码关注公众号,回复: 2541520 查看本文章

状态、音量设置等。完整的正常权限列表参考官网正常权限。

  (2)危险权限:

涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他

应用的操作产生影响的区域。例如:  读取通讯录、读写存储器数据、获取用户位置等。

如果应用声明需要这些危险权限,则必须在运行时明确告诉用户,让用户手动授予。

3.  权限组

  Android 系统对所有的危险权限进行了分组,称为权限组 。属于同一组的危险权

限将自动合并授予,用户授予应用某个权限组的权限,则应用将获得该权限组下的所

有权限。

下面用代码demo:

public class Main2Activity extends AppCompatActivity {
    //申请读写权限
    final static String[] REQUEST_PERMISSION = {
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE
    };
    //权限码
    final static int REQUEST_CODE = 1;
    private static final String TAG = "Main2Activity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //判断当前系统是否是Android6.0(对应API 23)以及以上
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1){
            //遍历权限组,检查是否拥有权限,只要有一个权限不满足就申请权限
            for (String permiss:REQUEST_PERMISSION)
            if (ActivityCompat.checkSelfPermission(this,permiss) != PackageManager.PERMISSION_GRANTED){
                //申请权限
                ActivityCompat.requestPermissions(this,REQUEST_PERMISSION,REQUEST_CODE);
            }
        }
    }

    /**
     * 申请权限回调方法
     * @param requestCode  请求码
     * @param permissions  请求权限组
     * @param grantResults  请求结果,0表示授权成功,-1表示授权失败
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //判断是否获取到权限
        if (requestCode == REQUEST_CODE){
            //执行读写操作
            Log.e(TAG, "onRequestPermissionsResult: " +  " 获得权限" );
        }
    }
}

  

猜你喜欢

转载自www.cnblogs.com/conglingkaishi/p/9418145.html