Android之权限问题
16lz
2021-01-26
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; } } } } } }
更多相关文章
- Android(安卓)11 中的隐私权更新 : 权限更新
- Android中直播视频技术探究之---基础知识大纲介绍
- Android6.0------权限申请管理(单个权限和多个权限申请)
- Android(安卓)获取当前应用分配的最大内存和目前使用内存的方法
- 【Android(安卓)Training - 03】使用Fragments建立动态的UI [ Le
- Android之动态改变布局
- Android中不支持动态申请权限的原因
- Android(安卓)6.0(API 23) 运行时权限
- Hbuilder android 在线更新功能 后端获取最新版本号和增量更新wg