简易动态请求权限

匿名 (未验证) 提交于 2019-12-03 00:26:01

最简单动态请求权限仅需四步

1.创建Class文件 PermissionReq类 如下

public class PermissionReq {     private static int sRequestCode = 0;     private static SparseArray<PermissionResult> sResultArray = new SparseArray<>();      private Object mObject;     private String[] mPermissions;     private PermissionResult mResult;      private PermissionReq(Object object) {         mObject = object;     }      public static PermissionReq with(@NonNull Activity activity) {         return new PermissionReq(activity);     }      public static PermissionReq with(@NonNull Fragment fragment) {         return new PermissionReq(fragment);     }      public PermissionReq permissions(@NonNull String... permissions) {         mPermissions = permissions;         return this;     }      public PermissionReq result(@Nullable PermissionResult result) {         mResult = result;         return this;     }      public void request() {         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {             if (mResult != null) {                 mResult.onGranted();             }             return;         }          Activity activity = getActivity(mObject);         if (activity == null) {             throw new IllegalArgumentException(mObject.getClass().getName() + " is not supported");         }          List<String> deniedPermissionList = getDeniedPermissions(activity, mPermissions);         if (deniedPermissionList.isEmpty()) {             if (mResult != null) {                 mResult.onGranted();             }             return;         }          int requestCode = genRequestCode();         String[] deniedPermissions = deniedPermissionList.toArray(new String[deniedPermissionList.size()]);         requestPermissions(mObject, deniedPermissions, requestCode);         sResultArray.put(requestCode, mResult);     }      public static void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {         PermissionResult result = sResultArray.get(requestCode);          if (result == null) {             return;         }          sResultArray.remove(requestCode);          for (int grantResult : grantResults) {             if (grantResult != PackageManager.PERMISSION_GRANTED) {                 result.onDenied();                 return;             }         }         result.onGranted();     }      @TargetApi(Build.VERSION_CODES.M)     private static void requestPermissions(Object object, String[] permissions, int requestCode) {         if (object instanceof Activity) {             ((Activity) object).requestPermissions(permissions, requestCode);         } else if (object instanceof Fragment) {             ((Fragment) object).requestPermissions(permissions, requestCode);         }     }      private static List<String> getDeniedPermissions(Context context, String[] permissions) {         List<String> deniedPermissionList = new ArrayList<>();         for (String permission : permissions) {             if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {                 deniedPermissionList.add(permission);             }         }         return deniedPermissionList;     }      private static Activity getActivity(Object object) {         if (object != null) {             if (object instanceof Activity) {                 return (Activity) object;             } else if (object instanceof Fragment) {                 return ((Fragment) object).getActivity();             }         }         return null;     }      private static int genRequestCode() {         return ++sRequestCode;     } } 

2.创建接口文件

public interface PermissionResult {     void onGranted();      void onDenied(); }

3.在请求的Activity中

4.重写onRequestPermissionsResult 如下

@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {     super.onRequestPermissionsResult(requestCode, permissions, grantResults);     PermissionReq.onRequestPermissionsResult(requestCode, permissions, grantResults); }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!