TA的每日心情 | 开心 2021-12-13 21:45 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
一个类解决Android6.0权限的繁杂,完美应付日常开发,欢迎指教~
在activity中涉及到需要申请权限的功能时,比如点击按钮照相,这是主要一段代码,没什么难度就是做了一个统一回调:
- /***
- * request permission for activity"s method of up 6.0
- * @param permissions
- * @param listener
- */
- public void requestPermissionFeature(String[] permissions, PermissionListener listener) {
- if (activity == null)
- return;
- shouldRequestPermissions = new ArrayList<>();
- denied = new ArrayList<>();
- tips = new ArrayList<>();
- this.permissionListener = listener;
- if (isNeedRequestPermission()) {
- for (int i = 0; i < permissions.length; i++) {
- if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED)
- shouldRequestPermissions.add(permissions[i]);
- }
- if (shouldRequestPermissions.size() > 0) {
- String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
- ActivityCompat.requestPermissions(activity, requestPermissions, PERMISSIONS_REQUEST_CODE);
- } else {
- if (permissionListener != null)
- permissionListener.granted();
- }
- } else {
- if (permissionListener != null)
- permissionListener.granted();
- }
- }
复制代码 在activity中这样用,同意回调,拒绝回调,拒绝后不再提示回调(需要用户手动去设置开启),注意:如果这个功能需要多个权限,有一个用户没有通过,那么该功能不可用,大家根据自己的需求在不同的回调里做操作:
- private void permissget() {
- builder.activity(this).requestPermissionFeature(new String[]{Manifest.permission.READ_PHONE_STATE}, new Permission.PermissionListener() {
- @Override
- public void granted() {
- initInfo();
- }
- @Override
- public void deniedNeverAsk() {
- ToastUtils.showToast(WelcomeActivity.this,getString(R.string.deniedNeverAsk));
- }
- @Override
- public void denied() {
- finish();
- }
- });
- }
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- builder.RequestPermissionsResult(requestCode,permissions,grantResults);
- }
复制代码 在fragment中差不多的用法 把上面的builder.activity(this)换成builder.fragment (this), 方法名requestPermissionForFragment,我会把全部类贴出来直接拿去用就ok了!!!
如果有什么问题还请指出。。后面会有更多野路子来应付实际开发(都是坑啊)
完整类↓↓
- public class Permission {
- public Permission() {
- }
- public static class Builder {
- private List<String> shouldRequestPermissions;
- private List<Integer> denied;
- private List<Boolean> tips;
- private Activity activity;
- private Fragment fragment;
- private PermissionListener permissionListener;
- private final int PERMISSIONS_REQUEST_CODE = 42;
- public Builder() {
- }
- public Permission build() {
- return new Permission();
- }
- public Builder activity(Activity activity) {
- this.activity = activity;
- return this;
- }
- public Builder fragment(Fragment fragment) {
- this.fragment = fragment;
- return this;
- }
- /***
- * request permission for activity"s method of up 6.0
- * @param permissions
- * @param listener
- */
- public void requestPermissionFeature(String[] permissions, PermissionListener listener) {
- if (activity == null)
- return;
- shouldRequestPermissions = new ArrayList<>();
- denied = new ArrayList<>();
- tips = new ArrayList<>();
- this.permissionListener = listener;
- if (isNeedRequestPermission()) {
- for (int i = 0; i < permissions.length; i++) {
- if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED)
- shouldRequestPermissions.add(permissions[i]);
- }
- if (shouldRequestPermissions.size() > 0) {
- String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
- ActivityCompat.requestPermissions(activity, requestPermissions, PERMISSIONS_REQUEST_CODE);
- } else {
- if (permissionListener != null)
- permissionListener.granted();
- }
- } else {
- if (permissionListener != null)
- permissionListener.granted();
- }
- }
- /***
- * request permission for fragment"s method of up 6.0
- * @param permissions
- * @param listener
- */
- public void requestPermissionForFragment(String[] permissions, PermissionListener listener) {
- if (fragment == null)
- return;
- shouldRequestPermissions = new ArrayList<>();
- denied = new ArrayList<>();
- tips = new ArrayList<>();
- this.permissionListener = listener;
- if (isNeedRequestPermission()) {
- for (int i = 0; i < permissions.length; i++) {
- if (ContextCompat.checkSelfPermission(fragment.getContext(), permissions[i]) != PackageManager.PERMISSION_GRANTED)
- shouldRequestPermissions.add(permissions[i]);
- }
- if (shouldRequestPermissions.size() > 0) {
- String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
- fragment.requestPermissions(requestPermissions, PERMISSIONS_REQUEST_CODE);
- } else {
- if (permissionListener != null)
- permissionListener.granted();
- }
- } else {
- if (permissionListener != null)
- permissionListener.granted();
- }
- }
- /**
- * this callback of all request permission
- * @param requestCode
- * @param permissions
- * @param grantResults
- */
- public void RequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- if (requestCode != PERMISSIONS_REQUEST_CODE)
- return;
- for (int i = 0; i < permissions.length; i++) {
- boolean isTip=false;
- if (activity != null) {
- isTip = ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[i]);
- } else {
- isTip = ActivityCompat.shouldShowRequestPermissionRationale(fragment.getActivity(), permissions[i]);
- }
- if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
- denied.add(i);
- if (!isTip)
- tips.add(isTip);
- }
- }
- if (denied.size() > 0) {
- if (permissionListener != null) {
- if (tips.size() > 0)
- permissionListener.deniedNeverAsk();
- else
- permissionListener.denied();
- }
- } else {
- if (permissionListener != null)
- permissionListener.granted();
- }
- }
- }
- private static boolean isNeedRequestPermission() {
- return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? true : false;
- }
- public interface PermissionListener {
- void granted();
- void denied();
- void deniedNeverAsk();
- }
- }
复制代码
|
|