Android 6.0权限的封装(一篇就够)

来源:互联网 发布:苹果5s怎么用4g网络 编辑:程序博客网 时间:2024/06/04 00:20

关于android 6.0权限封装的例子网上一堆,考虑到实际运用和用户体验,我还是亲自对权限进行了封装,个人认为更符合APP的操作习惯和体验性。

1、首先直接来看看权限的请求操作吧,例如,请求一个读取联系人权限Manifest.permission.READ_PHONE_STATE。

//实例化一个PermissionManager类对象private PermissionManager permissionManager = new PermissionManager(this);//请求权限的方法private void checkPermission() {    permissionManager.addPermission(new Permission() {            @Override            public String getPermission() {                //返回需要申请得权限                return Manifest.permission.READ_PHONE_STATE;            }            //权限申请的结果回调            @Override            public void onApplyResult(boolean succeed) {                if (succeed) {                    //请求成功操作                } else {                    //请求失败操作                }            }        }).apply(this);//传入Activity或者Fragment实例对象    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        //在权限回调里面调用permissionManager的onPermissionsResult()方法。        permissionManager.onPermissionsResult(requestCode, permissions, grantResults);    }

一看,是不是很简单,很实用,及时申请权限,及时处理。那有人说,申请多个权限怎么办?别急,申请多个权限直接代用permissionManager.addPermission(new Permission());迭代添加就行。例如:

permissionManager        .addPermission(new Permission() {            @Override            public String getPermission() {                return Manifest.permission.READ_EXTERNAL_STORAGE;            }            @Override            public void onApplyResult(boolean succeed) {                //根据succeed的返回值来判断权限有无来进行操作                }            }        })        .addPermission(new Permission() {            @Override            public String getPermission() {                return Manifest.permission.READ_PHONE_STATE;            }            @Override            public void onApplyResult(boolean succeed) {                //根据succeed的返回值来判断权限有无来进行操作                }            }        }).apply(this);

是不是还是很简单,看着很舒服。其实封装的操作很简单,只需简单的几步就可以完成。

2、首先创建一个“权限”接口,代表一个权限。

public interface Permission {    /**     * 请求的权限     *     * @return 请求的权限     */    String getPermission();    /**     * 请不权限返回的结果     *     * @param succeed 允许开启权限则返回true     */    void onApplyResult(boolean succeed);}

3、创建一个权限管理类,对权限进行管理和申请操作。

public class PermissionManager {    private static final int CODE = 601;    private List<Permission> mPermissionList;    private List<Permission> mNeedPermissionList;    private Activity mActivity;    private Fragment mFragment;    /**     * 在Activity里面申请权限     *     * @param activity 该Activity的实例对象     */    public PermissionManager(Activity activity) {        this.mActivity = activity;        mPermissionList = new ArrayList<>();        mNeedPermissionList = new ArrayList<>();    }    /**     * 在Fragment里面申请权限     *     * @param fragment 该Fragment的实例对象     */    public PermissionManager(Fragment fragment) {        this.mFragment = fragment;        mPermissionList = new ArrayList<>();        mNeedPermissionList = new ArrayList<>();    }    public PermissionManager addPermission(Permission permission) {        mPermissionList.add(permission);        return this;    }    public void apply(@NonNull Context context) {        for (int i = 0; i < mPermissionList.size(); i++) {            Permission permission = mPermissionList.get(i);            if (ContextCompat.checkSelfPermission(context, permission.getPermission()) != PackageManager.PERMISSION_GRANTED) {                mNeedPermissionList.add(permission);            } else {                permission.onApplyResult(true);            }        }        if (mNeedPermissionList.size() == 0) {            return;        }        String[] permission = new String[mNeedPermissionList.size()];        for (int j = 0; j < mNeedPermissionList.size(); j++) {            permission[j] = mNeedPermissionList.get(j).getPermission();        }        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            if (mActivity != null) {                mActivity.requestPermissions(permission, CODE);            } else {                mFragment.requestPermissions(permission, CODE);            }        }        if (null != mPermissionList) {            mPermissionList.clear();        }    }    /**     * 该方法必须在Activity或者Fragment的onRequestPermissionsResult() 调用,否则没有回调事件     *     * @param requestCode  请求码     * @param permissions  请求的权限     * @param grantResults 是否成功的标记     */    public void onPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        if (requestCode == CODE) {            for (int i = 0; i < mNeedPermissionList.size(); i++) {                if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {                    mNeedPermissionList.get(i).onApplyResult(true);                } else {                    mNeedPermissionList.get(i).onApplyResult(false);                }            }        }    }    public static boolean checkPermission(Context context, String permission) {        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;    }}

以上就是我对权限的一个简单封装,若有疑问和建议还希望留言指正,谢谢!

原创粉丝点击