Android权限管理

一、 权限管理

Android的权限从第一版就是存在的,但是在Android6.0之前权限的申请时如此简单,只需在AndroidMainFest.xml的申明,在安装的时候提醒app需要的权限,一次性全部同意就结束了,不同意便不能安装,但是到了6.0便改变了这一方式,引入了运行时权限。

动态申请权限

在使用app时具体需要使用某个权限时候动态申请,即使不同意某个权限也可以使用app,但并不是所有的权限都需要申请,Android将权限分为了两类,普通权限,危险权限

  • 普通权限
    #### 指那些不会威胁到用户的隐私信息,只需要在AndroidManiFest中申明既可,跟6.0以前的使用方式相同。
  • 危险权限

指那些会涉及到用户隐私信息安全的权限,例如定位,联系人,同时他们也需要在 AndroidManiFest中申请,目前在安卓中像这样的只有九种,26个权限,而且只要申请一组中的一个权限,那同一组其他的权限也会被申请获取到。

  • 九组危险权限

    1. 联系人相关的

      android.permission.READ_CONTACTS
      android.permission.WRITE_CONTACTS

    2. 日历

      android.permission.READ_CALENDAR
      android.permission.WRITE_CALENDAR

    3. 定位

      android.permission.ACCESS_FINE_LOCATION
      android.permission.ACCESS_COARSE_LOCATION

    4. 相机

      android.permission.CAMERA

    5. 录音

      android.permission.RECORD_AUDIO

    6. phone

      android.permission.READ_CALL_LOG
      android.permission.READ_PHONE_STATE
      android.permission.CALL_PHONE
      android.permission.WRITE_CALL_LOG
      android.permission.USE_SIP
      android.permission.PROCESS_OUTGOING_CALLS

    7. sms

      android.permission.READ_SMS
      android.permission.RECEIVE_WAP_PUSH
      android.permission.RECEIVE_MMS
      android.permission.RECEIVE_SMS
      android.permission.SEND_SMS
      android.permission.READ_CELL_BROADCASTS

    8. 传感器

      android.permission.BODY_SENSORS

    9. STORAGE

      android.permission.READ_EXTERNAL_STORAGE
      android.permission.WRITE_EXTERNAL_STORAGE

权限申请

  1. ### 权限检查
    ContextCompt.checkSelfPremission(this,premission)!=PackageManager.PERMISSION_GRANT

如果上诉条件不满足,则说明权限未申请,需要申请权限

  1. 权限申请

    ActivityCompat.requestPermisson(this,permisson,requestCode)

  2. 申请回调

    重写onRequestPermissionsResult()处理申请结果

  3. 用户是否拒绝权限

    shouldShowRequestPermissionRationale()
    判断用户是否点击了下次不再提醒,如果点击了方法将会返回false

完整流程

if(ContextCompt.checkselfPermisson()!=PackageManager.PERMISSION_GRANT){

//说明未授权

//可以在这里价格对话框提醒用户为什么要同意这个权限。然后在申请权限
//showDialogTipRequestPermission()

//直接申请权限
ActivityCompat.requestPermisson(this,permisson,requestCode)

}else{

//doAnything()

})

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

if(requestCode = “我们自己申请权限时传的code”){

//没申请成功
  if(grantResult[0]!=PackageManager.PERMISSION_GRANT){

      //判断用户是否点了不在提醒
      if(!shouldShowRequestPermissionRationale()){

        //跳到设置界面去手动授权

    goToAppSetting();

      }else{

          finish();
      }

  }else{

      //授权成功
  }

}

}

public void goToAppSetting(){


    Intent intent  = new Intent();
    intent.setAction(Setting.ACTION_APPLICATION_DETAILSSETTINGS);

    Uri uri = Uri.fromParts("package",getPackageName(),null);

    intent.setData(uri);
    startActivityForResult(intent,requestCode);

}

你可能感兴趣的:(Android)