Andriod 权限

1、分类

       首先安卓权限分为:正常权限、危险权限、特殊权限。

       正常权限:

             直接在AndriodManifest中配置即可以获得权限。例如:

            <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

       危险权限

              危险权限不仅需要需要在AndroidManifest中配置,还需要在使用前check是否真正拥有权限,以动态申请。

              危险权限在6.0系统以上的手机中并不是不申请就一定没有权限,部分手机还是默认提供权限的。但是为了系统的兼容性,对于危险权限最好还是要先check。

              危险权限有权限组的概念,即只要权限组中的任意一条获得了权限,该权限组就拥有了该权限。

              

编号   权限组       权限    中文
  0 CALENDAR READ_CALENDAR
WRITE_CALENDAR
  日历
  1  CAMERA CAMERA   相机
  2 CONTACTS READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
联系人
  3  LOCATION ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
 位置 
  4 MICROPHONE RECORD_AUDIO 麦克风
  5  PHONE READ_PHONE_STATE
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
电话
  6 SENSORS BODY_SENSORS 传感器
  7 SMS SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
短信
  8 STORAGE READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
存储

         例如动态获取存储权限:

          checkSelfPermisson(andriod.content.Context,String)主要用来判断我们是否拥有该权限,返回值:PERMISSON_GRANTED或者PERMISSON_DENIED

           shouldShowRequestPermissionale(andriod.app.Activity,String[],int),官方的解释为:“Gets whether you should show UI with rationale for requesting a permission”,个人认为就是用户在没有点击同意或者拒绝时,它就会返回false,当用户点击了后,它就会返回true.

          requestPermission(Activity activity , String[] permissions, int requestCode) ,用于来给用户判断是否开启权限,用户选择后,将会保存选择的结果,然后自动调用

ActivityCompat.OnRequestPermissionsResultCallback.onRequestPermissionsResult(int requestCode, String[] permission, int[] grantResults) 。

 public void requestAllPower() {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            /*ActivityCompat entends ContextCompat;
            * */
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            } else {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                                Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
            }
        }
    }
 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == 1) {
            for (int i = 0; i < permissions.length; i++) {
                if (grantResults[i] == PERMISSION_GRANTED) {
                    Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

    特殊权限:

                SYSTEM_ALERT_WINDOW : 设置悬浮窗

                WRITE_SETTINGS : 修改系统设置 

                目前还没有亲手实现,可参照博文:

                 https://www.jianshu.com/p/c3908cb3554d

         

原文地址:https://www.cnblogs.com/minblog/p/12131520.html