• Android 6.0权限改变


    对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录、短信等)。而在6.0以后,我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝(比如:单机的象棋对战,请求访问任何权限,我都是不同意的)。当然你也可以在设置界面对每个app的权限进行查看,以及对单个权限进行授权或者解除授权。

    新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。

    步骤:

    1. 在AndroidManifest文件中添加需要的权限。

      这个步骤和我们之前的开发并没有什么变化,试图去申请一个没有声明的权限可能会导致程序崩溃。

      2.检查权限 

      if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {

      }else{

      // }

        这里涉及到一个API,ContextCompat.checkSelfPermission,主要用于检测某个权限是否已经被授予,方法返回值为PackageManager.PERMISSION_DENIED或      者PackageManager.PERMISSION_GRANTED。当返回DENIED就需要进行申请授权了。

      3.申请授权

      ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, Y_PERMISSIONS_REQUEST_READ_CONTACTS);

         该方法是异步的,第一个参数是Context;第二个参数是需要申请的权限的字符串数组;第三个参数为requestCode,主要用于回调的时候检测。可以从方法                      名requestPermissions以及第二个参数看出,是支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。

      4.处理权限申请回调

           @Override

      public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

        switch (requestCode) {

           case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {

            // If request is cancelled, the result arrays are empty.

            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

               // permission was granted, yay! Do the

              // contacts-related task you need to do.

            } else {

              // permission denied, boo! Disable the

              // functionality that depends on this permission.

            }

            return;

          }

         }

        }

          对于权限的申请结果,首先验证requestCode定位到你的申请,然后验证grantResults对应于申请的结果,这里的数组对应于申请时的第二个权限字符串数组。

          如果你同时申请两个权限,那么grantResults的length就为2,分别记录你两个权限的申请结果。如果申请成功,就可以做你的事情了~

    转载:http://blog.csdn.net/lmj623565791/article/details/50709663; 

  • 相关阅读:
    mysql中Can't connect to MySQL server on 'localhost' (10061)
    Win7系统中提示:本地无法启动MySQL服务,报的错误:1067,进程意外终止的解决方法。
    Class.forName()用法详解
    ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
    Struts2的模板和主题theme及自定义theme的使用
    sql中 in 、not in 、exists、not exists 用法和差别
    JavaScript的replace方法与正则表达式结合应用讲解
    Caused by: java.lang.NoClassDefFoundError at com.jc.zm.ZmAlarmAction.analyDo(ZmAlarmAction.java:198)
    打开jsp页面时,显示空白页。
    chown命令详情
  • 原文地址:https://www.cnblogs.com/llxbl/p/6256408.html
Copyright © 2020-2023  润新知