Android之权限问题

 

android6.0(即Android M)及以上版本区分了:普通权限和危险权限。普通权限可以直接在清单文件里面申请, 危险权限不仅要在清单文件里面申请,还要在代码里面动态获取。如果你仅仅动态获取了, 没有在清单文件里面申明,在你返回的回调方法里面会被拒绝给权限。

由于以前4.2的版本用的比较多这个一直没有留意这个。最近改用6.0,7.0,8.0了所以就记录下。

关于权限的动态获取先说下简单的思路。

第一步:判断当前系统的版本如果低于6.0那还是用老办法在清单文件里面申明即(AndroidManiferst.xml里面声明)。

第二步:判断当前需要的权限是否已经获取,如果没有获取则动态获取,否则就可以不做处理。

第三步:动态获取权限。即弹窗提示用户获取该权限的作用,由用户选择是否给予该权限。

第四步:相应回调。

代码如下

     /*AndroidManifest.xml*/              core:    String[] permission = {Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR};//需要的权限    String title = "日历权限不可用";    String content = "由于应用需要或者当前日历设置相应属性,所以需要日历相关权限;\n否则,您将无法正常使用日历功能";    initPermission(permission,title,content);    /*初始化应用权限*/    private void initPermission(String[] permission, String title, String content) {        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){            ListpermissionList = new ArrayList<>();            for(int i = 0;i permissionList, String title, String content) {        new AlertDialog.Builder(this).setTitle(title).setMessage(content).setPositiveButton("立即开启", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialogInterface, int i) {                startRequestPermission(permissionList);            }        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialogInterface, int i) {                finish();            }        }).setCancelable(false).show();    }    /*权限申请*/    private void startRequestPermission(List permissionList) {        if(!permissionList.isEmpty()){            String[] permissions = permissionList.toArray(new String[permissionList.size()]);            ActivityCompat.requestPermissions(this,permissions,1010);        }    }    /*获取权限回调方法*/    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (requestCode == 1010){            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){                if (grantResults.length > 0){                    for (int i = 0; i< grantResults.length;i++){                        int grantResult = grantResults[i];                        switch (grantResult){                            case PackageManager.PERMISSION_GRANTED://权限被授予                                Toast.makeText(this,permissions[i]+"权限获取成功",Toast.LENGTH_SHORT).show();                                break;                            case PackageManager.PERMISSION_DENIED://权限被拒绝                                Toast.makeText(this,permissions[i]+"权限获取失败",Toast.LENGTH_SHORT).show();                                finish();                                break;                        }                    }                }            }        }    }

 

更多相关文章

  1. Android(安卓)11 中的隐私权更新 : 权限更新
  2. Android中直播视频技术探究之---基础知识大纲介绍
  3. Android6.0------权限申请管理(单个权限和多个权限申请)
  4. Android(安卓)获取当前应用分配的最大内存和目前使用内存的方法
  5. 【Android(安卓)Training - 03】使用Fragments建立动态的UI [ Le
  6. Android之动态改变布局
  7. Android中不支持动态申请权限的原因
  8. Android(安卓)6.0(API 23) 运行时权限
  9. Hbuilder android 在线更新功能 后端获取最新版本号和增量更新wg

随机推荐

  1. 完美解决 Failed to fetch URL https://d
  2. Android如何设置两个view的Z order?
  3. 通过signapk.jar 为Android(安卓)应用程
  4. Android(安卓)Sensor分析
  5. Android(安卓)TextView 设置字与字之间的
  6. 借助HorizontalScrollView实现多列ListVi
  7. Android(安卓)系统名字、版本、API level
  8. Android(安卓)SwipeRefreshLayout Recycl
  9. 应用内存限制
  10. android生命周期总结