Android动态申请权限知识

1.Android6.0(APIlevel23)开始targetSdkVersion>=23的应用必须在运行时动态申请权限
  2.权限请求对话框是操作系统进行管理的,应用无法也不应该干预。
  3.系统对话框描述的是权限组而不是某个具体权限
  4.调用requestPermissions并不意味着系统一定会弹出权限请求对话框,也就是说不能假设调用该方法后就发生了用户交互,因为如果用户之前勾选了“禁止后不再询问”或者系统策略禁止应用获取权限,那么系统会直接拒绝此次权限请求,没有任何交互
  5.如果某个权限跟应用的主要功能无关,如应用中广告可能需要位置权限,用户可能很费解,此时在申请权限之前弹出对话框向用户解释为什么需要这个权限是个不错的选择。但不要在所有申请权限之前都弹出对话框解释,因为频繁地打断用户的操作或让用户进行选择容易让用户不耐烦
  6.Fragment中的onRequestPermissionsResult方法只有在使用Fragment#requestPermissions方法申请权限时才可能接收到回调,建议将权限放在所属Activity中申请和处理
  7.应用应该尽量少地申请权限,像让用户拍一张照片或者选择一张图片完全不需要相机权限和外存权限,可以通过隐式Intent拉起系统相机或其他应用完成,应用只需要在onActivityResult回调中接收数据就行了。但是有一点一定要注意,如果你在AndroidManifest.xml文件中声明了相机权限,你就必须得动态申请并获得相机权限才能拉起系统相机.android
  //请求通讯录权限的模板代码如下
  privatevoidshowContactsWithPermissionsCheck{
  if(ContextCompat.checkSelfPermission(MainActivity.this,
  Manifest.permission.READ_CONTACTS)
  !=PackageManager.PERMISSION_GRANTED){
  if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
  Manifest.permission.READ_CONTACTS)){
  //TODO:弹框解释为什么需要这个权限.【下一步】->再次请求权限
  }else{
  ActivityCompat.requestPermissions(MainActivity.this,
  newString[]{Manifest.permission.READ_CONTACTS},
  RC_CONTACTS);
  }
  }else{
  showContacts;
  }
  }
  privatevoidshowContacts{
  startActivity(ContactsActivity.getIntent(MainActivity.this));
  }
  @Override
  publicvoidonRequestPermissionsResult(intrequestCode,@NonNullString[]permissions,
  @NonNullint[]grantResults){
  super.onRequestPermissionsResult(requestCode,permissions,grantResults);
  switch(requestCode){
  caseRC_CONTACTS:
  if(grantResults.length>0
  &&grantResults[0]PackageManager.PERMISSION_GRANTED){
  showContacts;
  }else{
  if(!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
  Manifest.permission.READ_CONTACTS)){
  //TODO:弹框引导用户去设置页主动授予该权限.【去设置】->应用信息页
  }else{
  //TODO:弹框解释为什么需要这个权限.【下一步】->再次请求权限
  }
  }
  break;
  default:
  break;
  }
  }
  @Override
  protectedvoidonActivityResult(intrequestCode,intresultCode,@NullableIntentdata){
  super.onActivityResult(requestCode,resultCode,data);
  if(requestCode
RC_SETTINGS){
  //TODO:在用户主动授予权限后重新检查权限,但不要在这里进行事务提交等生命周期敏感操作
  }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值