zoukankan      html  css  js  c++  java
  • 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
              }
          }
      }
  • 相关阅读:
    koa学习中的一系列问题-mongodb
    JS基础语法使用
    vue中的this指向问题
    CDN的问题
    vue基本语法及使用
    python自动化读取excel数据,写入excel数据,xlrd、xlutils
    jenkins配置邮件发送功能
    pytest生成的index.html报告发送邮箱后没有样式的解决办法
    pytest命令同时执行多个目录,多个不同目录下的文件
    pytest+jenkins+allure生成报告
  • 原文地址:https://www.cnblogs.com/wenhui92/p/6242674.html
Copyright © 2011-2022 走看看