当前位置: 移动技术网 > IT编程>移动开发>Android > 位运算的简单应用-权限管理

位运算的简单应用-权限管理

2020年01月17日  | 移动技术网IT编程  | 我要评论

杭州邮政编码,万圣节打鬼,四字成语词典

个人博客

位运算的简单应用-权限管理

位运算在实际的开发中,有很多巧妙的应用场景。如:

  1. 一个存放正整数的数组,里面有一个数字只出现一次,其它数字都出现两次,求只出现一次的数字。

  2. 不用临时变量,交换两个数字的值。

  3. android中window设置flag

    public void setflags(int flags, int mask) {
        final windowmanager.layoutparams attrs = getattributes();
        attrs.flags = (attrs.flags&~mask) | (flags&mask);
        mforcedwindowflags |= mask;
        dispatchwindowattributeschanged(attrs);
    }
  1. 产品具有某些feature,这些feature可以利用位运算来存储。

下面利用位运算来简单模拟权限管理

权限管理类

public class permissionmanager {

    public static final int permission_none = 1;

    public static final int permission_a = 1 << 1;

    public static final int permission_b = 1 << 2;

    public static final int permission_c = 1 << 3;

    public static final int permission_d = 1 << 4;

    private int mpermission = permission_none;

    private static class permissionmanagerholder {
        static permissionmanager spermissionmanager = new permissionmanager();
    }

    private permissionmanager() {

    }

    public static permissionmanager getinstance() {
        return permissionmanagerholder.spermissionmanager;
    }

    /**
     * 添加权限
     * @param permission
     */
    public void addpermission(int permission) {
        if (haspermission(permission)) {
            return;
        }
        mpermission |= permission;
    }

    /**
     * 移除权限
     * @param permission
     */
    public void removepermission(int permission) {
        if (!haspermission(permission)) {
            return;
        }
        mpermission &= ~permission;
    }

    /**
     * 判断是否有权限
     * @param permission
     * @return
     */
    public boolean haspermission(int permission) {
        return (mpermission & permission) != 0;
    }

}

使用

public static void main(string[] args) {
        system.out.println("没有添加任何权限----------");
        permissionmanager permissionmanager = permissionmanager.getinstance();
        checkpermission(permissionmanager);
        system.out.println("添加权限a----------");
        system.out.println("添加权限b----------");
        system.out.println("添加权限c----------");
        permissionmanager.addpermission(permissionmanager.permission_a);
        permissionmanager.addpermission(permissionmanager.permission_b);
        permissionmanager.addpermission(permissionmanager.permission_c);
        checkpermission(permissionmanager);
        system.out.println("删除权限c----------");
        permissionmanager.removepermission(permissionmanager.permission_c);
        checkpermission(permissionmanager);
    }

    public static void checkpermission(permissionmanager permissionmanager) {
        system.out.println("permission_a exist:" + permissionmanager.haspermission(permissionmanager.permission_a));
        system.out.println("permission_b exist:" + permissionmanager.haspermission(permissionmanager.permission_b));
        system.out.println("permission_c exist:" + permissionmanager.haspermission(permissionmanager.permission_c));
        system.out.println("permission_d exist:" + permissionmanager.haspermission(permissionmanager.permission_d));
    }

输出结果:

没有添加任何权限----------
permission_a exist:false
permission_b exist:false
permission_c exist:false
permission_d exist:false
添加权限a----------
添加权限b----------
添加权限c----------
permission_a exist:true
permission_b exist:true
permission_c exist:true
permission_d exist:false
删除权限c----------
permission_a exist:true
permission_b exist:true
permission_c exist:false
permission_d exist:false

位运算并不限于权限管理,具有多个状态的应用场景,都可以用到。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网