Loading

Android 6.0 权限申请

google官方例子: https://github.com/googlesamples/android-RuntimePermissions

 

Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测。

以下权限都需要在运行时判断:

身体传感器,日历,摄像头,通讯录,地理位置,麦克风,电话,短信,存储空间

运行时权限处理

Android6.0系统默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限,所以如果你以前的APP设置的targetSdkVersion低于23,在运行时也不会崩溃,但这也只是一个临时的救急策略,用户还是可以在设置中取消授予的权限。

检查并申请权限
我们需要在用到权限的地方,每次都检查是否APP已经拥有权限,比如我们有一个下载功能,需要写SD卡的权限,我们在写入之前检查是否有WRITE_EXTERNAL_STORAGE权限,没有则申请权限

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
              != PackageManager.PERMISSION_GRANTED) {
          //申请WRITE_EXTERNAL_STORAGE权限
          ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                  WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
      }

请求权限后,系统会弹出请求权限的Dialog

用户选择允许或需要后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult

  @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
      super.onRequestPermissionsResult(requestCode, permissions, grantResults);
      doNext(requestCode,grantResults);
  }

我们接着需要根据requestCode和grantResults(授权结果)做相应的后续处理

private void doNext(int requestCode, int[] grantResults) {
      if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
          if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
              // Permission Granted
          } else {
              // Permission Denied
          }
      }
  }

 

posted @ 2017-01-02 16:40  辉灬  阅读(306)  评论(0编辑  收藏  举报