Android 6.0动态权限的获取

来源:互联网 发布:有趣的标语 知乎 编辑:程序博客网 时间:2024/06/05 21:01
    Android6.0的权限分为普通权限和危险权限,其中普通权限还是可以和以前一样,通过在AndroidManifest.xml中赋予,比如:
<uses-permission android:name="android.permission.INTERNET"/>
    所以我们重点说一下危险权限,危险权限包括这些:

危险权限

    你在使用的时候就可以看看,是不是用到了上述的这些权限,如果用到了,记得要动态赋予权限,不然就算在AndroidManifest.xml中声明了也没有用。    好了接下来说说,怎么动态获取权限,我用android.permission.WRITE_EXTERNAL_STORAGE来举个例子。

步骤

  • 判断是不是M版本
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
  • 如果是M版本,就检查是否拥有我需要的权限
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED
  • 如果没有请求权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
  • 请求权限后,将会回调onRequestPermissionsResult

代码

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {                //获取权限                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST_CODE);            } else {                init();            }        }
    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        doNext(requestCode, grantResults);    }    private void doNext(int requestCode, int[] grantResults) {        if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                // Permission Granted                init();            } else {                // Permission Denied            }        }    }
0 0
原创粉丝点击