Android6.0应用权限申请

  android从6.0版本以后为了提升android用户的安全性添加了重要危险的权限必须申请以后才能使用,例如向读取手机状态,蓝牙,SD卡等这些涉及用户信息这种权限,我们必须在manifest中注册,也必须在代码中动态申请才能正常使用这些权限功能。 

用户授权一般来说我们有2种方式:

  1.  在用户安装完成后第一次进入App后,我们在引导界面即可以对所有的权限进行申请,让用户授予我们当前APP所有的权限
  2. 第二种方式比较灵活,不采用一次性授权,而是当用户使用到我们需要权限的地方,动态的调取授权方法,进行授权

 这里我们将权限单独进行处理,放进我们的基础类中,这样不管是我们一次性授权还是根据用户的使用来进行授权都可以。

直接上代码:

首先我们定义一个接口返回授权的结果:

  • /**
     * 权限授权成功失败的回调
     */
    public interface PermissonListener {
        /**
         * 成功
         */
        void onGranted();
    
        /***
         * 失败
         * @param denidePermisson 失败返回我们的被用户拒绝的权限 
         */
        void onDenide(List<String> denidePression);
    }
    

我们在基类BaseActivity中添加申请权限的方法,判断是否需要权限申请,有则提交申请,没有则返回成功

  • public void requestPermisson(String[] permissons, PermissonListener lister) {
       //permissons 申请的权限集合  PermissonListener 对应的接口
       // 通过activity管理器获取当前栈顶activity
        Activity toActivity = AppManager.getAppManager().currentActivity();
       //判断是否为空 
        if (toActivity == null) {
            return;
        }
       //接口对象
        mListener = lister;
       //创建一个新的集合 用来判断提交的授权集合中那些是没有给予授权的 添加到这个新的集合中
        List<String> permissonsList = new ArrayList<>();
        //判断提交的权限集合中是否存在没有授权的权限
        for (String premison : premisons) {
            if (ContextCompat.checkSelfPermission(toActivity, premison) != PackageManager.PERMISSION_GRANTED) {
                permissonList.add(premison);
            }
        }
        //判断新集合中是否有需要授权的权限 如果没有则直接返回成功 有需要提交
        if (!permissonList.isEmpty()) {
            ActivityCompat.requestPermissions(toActivity, permissonList.toArray(new String[permissonList.size()]),       1); } else {
            //权限已经全部授权
            mListener.onGranted();
        }
    }
    

当然我们需要实现onRequestPermissionsResult这个方法来接收我们提交注册的权限返回的结果:

  • @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:
                //判断返回是否有被拒绝权限
                if (grantResults.length > 0) {
                    List<String> denidePermission = new ArrayList<>();
                    for (int i = 0; i < grantResults.length; i++) {
                        int grantResult = grantResults[i];
                        String perission = permissions[i];
                        if (grantResult != PackageManager.PERMISSION_GRANTED) {
                            denidePermission.add(perission);
                        }
                    }
                   //返回结果
                    if (denidePermission.isEmpty()) {
                        mListener.onGranted();
                    } else {
                        mListener.onDenide(denidePermission);
                    }
                }
                break;
            default:
                break;
        }

    简单的基本调用就完成了,因为写在BaseActivity基类里面,当Activity继承BaseActivity后便可以调用方法进行授权,如果你需要一次性授权,则可以在APP启动界面进行权限授权,并且可以对授权结果进行处理。也可以使用的时候进行授权,比如挡在调用相机时 ,在调用之前进行授权。使用参考:

  • public class SplashActivity extends BaseActivity {
        private String[] permitionstrings = new String[]{Manifest.permission.CAMERA,
               Manifest.permission.READ_PHONE_STATE};
    
        @Override
        protected int getContentViewResId() {
            return R.layout.activity_splash;
        }
    
        @Override
        protected void initData() {
          TextView textSplashContent= (TextView) findViewById(R.id.text_splash_content);
          textSplashContent.setOnClickListener(new OnClickListener() {
           @Override
           public void onClick(View v) {
           //授权方法
            Permissionsdetect(permitionstrings);
         }
         });
        }
    
  •    //权限验证
        public void Permissionsdetect(String[] strings) {
            requestRuntimePermison(strings, new PermissonListener() {
                @Override
                public void onGranted() {
                    //全部权限已经授权成功
                }
    
                @Override
                public void onDenide(List<String> denidePression) {
                    Log.i("i", "授权失败----ondenide");
                  //有权限没有授权成功 可以denidePression查看没有通过的权限并且进行你的下一步处理
            });
    }

   以上就是简单的权限注册解决方案,走到这里别忘了 我们最基本申请动态权限,也需要在AndroidMainfest清单文件里面申明申请的权限

 

 

      

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值