zoukankan      html  css  js  c++  java
  • 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

             

  • 相关阅读:
    双系统安装,引导被覆盖-如何解决?
    关于apue.3e中apue.h的使用
    UML类图关系
    设计模式的原则
    插入排序Insertion Sort
    Xcode intellisense meaning of letters in colored boxes like f,T,C,M,P,C,K,# etc
    asp.net mvc 页面内容呈现Html.Raw HtmlString
    sqlserver通过设计器修改表结构保存时提示:保存到文本问题
    在windows下使用Cygwin模拟unix环境,并安装apt-cyg,svn等工具
    vs2015插件推荐 Productivity Power Tools 2015
  • 原文地址:https://www.cnblogs.com/minblog/p/12131520.html
Copyright © 2011-2022 走看看