52.自己动手封装Android6.0运行时权限相关代码
来源:互联网 发布:叉叉助手最新源码 编辑:程序博客网 时间:2024/05/01 20:41
转载请注明出处 http://blog.csdn.net/qq_31715429/article/details/52786614
本文出自:猴菇先生的博客
在app中用到动态判断运行时权限的地方还是蛮多的,比如读写SD卡、获取电话信息、拍照、定位啥的,每次的重复代码也蛮多的。看了郭霖大神CSDN公开课直播Android6.0运行时权限,讲了如何封装,下面是改过之后的代码:
1、在BaseActivity中:
//6.0以上系统判断权限 --> start private static final int RUNTIME_PERMISSION_REQUEST_CODE = 1; private RuntimePermissionListener mRuntimePermissionListener; /** * 检查运行时权限 * * @param permissions 所检查的权限数组 * @param runtimePermissionListener 运行时权限监听器 */ public void checkRuntimePermission(String[] permissions, RuntimePermissionListener runtimePermissionListener) { mRuntimePermissionListener = runtimePermissionListener; List<String> deniedPermissionList = new ArrayList<>(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {//判断权限是否允许 deniedPermissionList.add(permission); } } if (deniedPermissionList.isEmpty()) { //权限全部允许 mRuntimePermissionListener.onRuntimePermissionGranted(); } else { String[] deniedPermissionArray = deniedPermissionList.toArray(new String[deniedPermissionList.size()]); //请求未允许的权限 ActivityCompat.requestPermissions(this, deniedPermissionArray, RUNTIME_PERMISSION_REQUEST_CODE); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case RUNTIME_PERMISSION_REQUEST_CODE: if (grantResults.length > 0) { List<String> deniedPermissionList = new ArrayList<>(); for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { deniedPermissionList.add(permissions[i]); } } if (deniedPermissionList.isEmpty()) { //权限全部允许 mRuntimePermissionListener.onRuntimePermissionGranted(); } else {//有拒绝的权限 mRuntimePermissionListener.onRuntimePermissionDenied(); } } } } /** * 运行时权限监听器 */ public interface RuntimePermissionListener { /** * 允许所请求的全部权限 */ void onRuntimePermissionGranted(); /** * 拒绝所请求的部分或全部权限 */ void onRuntimePermissionDenied(); }//6.0以上系统判断权限 --> end
2、在需要检查权限的activity中使用:
/** * 请求权限 */ private void checkRuntimePermission() { String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE , Manifest.permission.CALL_PHONE , Manifest.permission.ACCESS_COARSE_LOCATION}; checkRuntimePermission(permissions, new RuntimePermissionListener() { @Override public void onRuntimePermissionGranted() { //do something } @Override public void onRuntimePermissionDenied() { ToastUtil.show(MAinActivity.this, "拒绝该权限将无法使用部分功能"); } }); }
3、如果在fragment中怎么用呢,那就在BaseFragment中:
/** * 检查运行时权限 * * @param permissions 所检查的权限数组 * @param runtimePermissionListener 运行时权限监听器 */ public void checkRuntimePermission(String[] permissions, RuntimePermissionListener runtimePermissionListener) { Activity activity = getActivity(); if (activity instanceof BaseActivity) { ((BaseActivity) activity).checkRuntimePermission(permissions, runtimePermissionListener); } }
使用方法和在activity中一样~
附上郭神视频录播地址:http://edu.csdn.net/course/detail/3539
0 0
- 52.自己动手封装Android6.0运行时权限相关代码
- android6.0运行时权限完美封装
- Android6.0运行时权限的封装
- android6.0运行时权限完美封装
- Android6.0M运行时权限封装
- Android6.0运行时权限的封装(参考郭神的视频总结的代码)
- Android6.0运行时权限处理-超简单封装
- Android6.0运行时权限的理解和封装
- Android6.0运行时权限(二)之封装
- Android6.0动态运行时权限封装使用
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限
- 【Android6.0】运行时权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0 运行时权限
- Android6.0运行时权限
- 自适应按钮
- Git远程操作详解
- 二叉树的镜像
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- 细数中学生听讲技巧
- 52.自己动手封装Android6.0运行时权限相关代码
- Android控件 - ListView 简介
- 使用Markdown的方法
- 第八周—OJ小球下落反弹问题
- vsftp服务搭建
- Android笔记:invalidate()和postInvalidate() 的区别及使用
- 20161021-Allegro拼板
- dom 节点属性
- jquey 蒙版加载中特效