Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 204|回复: 0

[默认分类] android6.0权限通用管理(不在头大)

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-2 10:25:18 | 显示全部楼层 |阅读模式

    一个类解决Android6.0权限的繁杂,完美应付日常开发,欢迎指教~
      在activity中涉及到需要申请权限的功能时,比如点击按钮照相,这是主要一段代码,没什么难度就是做了一个统一回调:


    1.   /***
    2.          * request permission for activity"s method of up 6.0
    3.          * @param permissions
    4.          * @param listener
    5.          */
    6.         public void requestPermissionFeature(String[] permissions, PermissionListener listener) {
    7.             if (activity == null)
    8.                 return;
    9.             shouldRequestPermissions = new ArrayList<>();
    10.             denied = new ArrayList<>();
    11.             tips = new ArrayList<>();
    12.             this.permissionListener = listener;
    13.             if (isNeedRequestPermission()) {
    14.                 for (int i = 0; i < permissions.length; i++) {
    15.                     if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED)
    16.                         shouldRequestPermissions.add(permissions[i]);
    17.                 }
    18.                 if (shouldRequestPermissions.size() > 0) {
    19.                     String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
    20.                     ActivityCompat.requestPermissions(activity, requestPermissions, PERMISSIONS_REQUEST_CODE);
    21.                 } else {
    22.                     if (permissionListener != null)
    23.                         permissionListener.granted();
    24.                 }
    25.             } else {
    26.                 if (permissionListener != null)
    27.                     permissionListener.granted();
    28.             }
    29.         }
    复制代码
    在activity中这样用,同意回调,拒绝回调,拒绝后不再提示回调(需要用户手动去设置开启),注意:如果这个功能需要多个权限,有一个用户没有通过,那么该功能不可用,大家根据自己的需求在不同的回调里做操作:


    1.     private void permissget() {   
    2.         builder.activity(this).requestPermissionFeature(new String[]{Manifest.permission.READ_PHONE_STATE}, new Permission.PermissionListener() {
    3.             @Override
    4.             public void granted() {
    5.                 initInfo();
    6.             }
    7.             @Override
    8.             public void deniedNeverAsk() {
    9.                 ToastUtils.showToast(WelcomeActivity.this,getString(R.string.deniedNeverAsk));
    10.             }
    11.             @Override
    12.             public void denied() {
    13.                 finish();
    14.             }
    15.         });
    16.     }
    17.     @Override
    18.     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    19.         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    20.         builder.RequestPermissionsResult(requestCode,permissions,grantResults);
    21.     }
    复制代码
    在fragment中差不多的用法  把上面的builder.activity(this)换成builder.fragment (this), 方法名requestPermissionForFragment,我会把全部类贴出来直接拿去用就ok了!!!

    如果有什么问题还请指出。。后面会有更多野路子来应付实际开发(都是坑啊)
    完整类↓↓

    1. public class Permission {
    2.     public Permission() {
    3.     }
    4.     public  static class Builder {
    5.         private List<String> shouldRequestPermissions;
    6.         private List<Integer> denied;
    7.         private List<Boolean> tips;
    8.         private Activity activity;
    9.         private Fragment fragment;
    10.         private PermissionListener permissionListener;
    11.         private final int PERMISSIONS_REQUEST_CODE = 42;
    12.         public Builder() {
    13.         }
    14.         public Permission build() {
    15.             return new Permission();
    16.         }
    17.         public Builder activity(Activity activity) {
    18.             this.activity = activity;
    19.             return this;
    20.         }
    21.         public Builder fragment(Fragment fragment) {
    22.             this.fragment = fragment;
    23.             return this;
    24.         }
    25.         /***
    26.          * request permission for activity"s method of up 6.0
    27.          * @param permissions
    28.          * @param listener
    29.          */
    30.         public void requestPermissionFeature(String[] permissions, PermissionListener listener) {
    31.             if (activity == null)
    32.                 return;
    33.             shouldRequestPermissions = new ArrayList<>();
    34.             denied = new ArrayList<>();
    35.             tips = new ArrayList<>();
    36.             this.permissionListener = listener;
    37.             if (isNeedRequestPermission()) {
    38.                 for (int i = 0; i < permissions.length; i++) {
    39.                     if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED)
    40.                         shouldRequestPermissions.add(permissions[i]);
    41.                 }
    42.                 if (shouldRequestPermissions.size() > 0) {
    43.                     String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
    44.                     ActivityCompat.requestPermissions(activity, requestPermissions, PERMISSIONS_REQUEST_CODE);
    45.                 } else {
    46.                     if (permissionListener != null)
    47.                         permissionListener.granted();
    48.                 }
    49.             } else {
    50.                 if (permissionListener != null)
    51.                     permissionListener.granted();
    52.             }
    53.         }
    54.         /***
    55.          * request permission for fragment"s method of up 6.0
    56.          * @param permissions
    57.          * @param listener
    58.          */
    59.         public void requestPermissionForFragment(String[] permissions, PermissionListener listener) {
    60.             if (fragment == null)
    61.                 return;
    62.             shouldRequestPermissions = new ArrayList<>();
    63.             denied = new ArrayList<>();
    64.             tips = new ArrayList<>();
    65.             this.permissionListener = listener;
    66.             if (isNeedRequestPermission()) {
    67.                 for (int i = 0; i < permissions.length; i++) {
    68.                     if (ContextCompat.checkSelfPermission(fragment.getContext(), permissions[i]) != PackageManager.PERMISSION_GRANTED)
    69.                         shouldRequestPermissions.add(permissions[i]);
    70.                 }
    71.                 if (shouldRequestPermissions.size() > 0) {
    72.                     String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
    73.                     fragment.requestPermissions(requestPermissions, PERMISSIONS_REQUEST_CODE);
    74.                 } else {
    75.                     if (permissionListener != null)
    76.                         permissionListener.granted();
    77.                 }
    78.             } else {
    79.                 if (permissionListener != null)
    80.                     permissionListener.granted();
    81.             }
    82.         }
    83.         /**
    84.          * this callback of all request permission
    85.          * @param requestCode
    86.          * @param permissions
    87.          * @param grantResults
    88.          */
    89.         public void RequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    90.             if (requestCode != PERMISSIONS_REQUEST_CODE)
    91.                 return;
    92.             for (int i = 0; i < permissions.length; i++) {
    93.                 boolean isTip=false;
    94.                 if (activity != null) {
    95.                     isTip = ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[i]);
    96.                 } else {
    97.                     isTip = ActivityCompat.shouldShowRequestPermissionRationale(fragment.getActivity(), permissions[i]);
    98.                 }
    99.                 if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
    100.                     denied.add(i);
    101.                     if (!isTip)
    102.                         tips.add(isTip);
    103.                 }
    104.             }
    105.             if (denied.size() > 0) {
    106.                 if (permissionListener != null) {
    107.                     if (tips.size() > 0)
    108.                         permissionListener.deniedNeverAsk();
    109.                     else
    110.                         permissionListener.denied();
    111.                 }
    112.             } else {
    113.                 if (permissionListener != null)
    114.                     permissionListener.granted();
    115.             }
    116.         }
    117.     }
    118.     private static boolean isNeedRequestPermission() {
    119.         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? true : false;
    120.     }
    121.     public interface PermissionListener {
    122.         void granted();
    123.         void denied();
    124.         void deniedNeverAsk();
    125.     }
    126. }
    复制代码










      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 23:23 , Processed in 0.566815 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表