FLAG_DISMISS_KEYGUARD & FLAG_SHOW_WHEN_LOCKED


getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD): 這一個標志的意思是去掉鎖屏界面,但這對安全鎖(圖案或者密碼鎖屏界面)是無效的。在沒有設置安全鎖的時候,我們需要上滑一下(可能是其它方式)退出鎖屏界面,才能進入桌面,這個標志就是去掉這一界面,使得比如網易雲音樂這類在鎖屏界面播放的時候,只需要直接解鎖雲音樂的鎖屏即可,不需要再上滑解除系統本身的鎖屏。

可以認為鎖屏界面是一個窗口視圖,解鎖圖案界面是另一個窗口視圖,FLAG_DISMISS_KEYGUARD只能控制去除鎖屏界面窗口。

 

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED): 這一個標志的意思是使得窗口浮在鎖屏界面之上。這給像電話這類應用一個快捷的不需要解鎖的就能使用的便利。

 

flag & | ~的使用方法:

public static final int FLAG_A = 0x4; 
public static final int FLAG_B = 0x8;

private int flag = 0;

添加標志,並且不同標志是疊加到這一個變量上的:

flag |= FLAG_A; 
flag |= FLAG_B;

判斷是否添加了該標志:

boolean hasA = (0 != (flag & FLAG_A)); 
boolean hasB = (0 != (flag & FLAG_B));

刪除某一已添加的標志:

if(hasA){
  flag &= ~FLAG_A;
 }
 if(hasB){
  flag &= ~FLAG_B;
 }

FLAG_A和FLAG_B的設置也是有講究的,& | ~是按位操作符,所以必須FLAG必須是按位不重復的。比如FLAG_A = 1; FLAG_B = 2是可以的,FLAG_C = 3就同時包括了FLAG_A和FLAG_B,所以當flag = FLAG_C時,hasA和hasB就同時為true了。

通常我們如下約定FLAG標志:

public static final int SUPPORT_DELETE = 1 << 0;
public static final int SUPPORT_ROTATE = 1 << 1;
public static final int SUPPORT_SHARE = 1 << 2;
public static final int SUPPORT_CROP = 1 << 3;
public static final int SUPPORT_SHOW_ON_MAP = 1 << 4;
public static final int SUPPORT_SETAS = 1 << 5;
public static final int SUPPORT_FULL_IMAGE = 1 << 6;
public static final int SUPPORT_ALL = 0xffffffff;

這樣就絕對不會有重復了。

public class LogicalTest{
    
    public static final int FLAG_A = 0x00400000;
    public static final int FLAG_B = 0x00080000;

    private static int flag = 0;
    public static void main(String[] args){
        
        flag |= FLAG_A;
        System.out.println("--- flag = " + Integer.toHexString(flag)+ ", hasA() = " + hasA() + ", hasB() = " + hasB());
        flag |= FLAG_B;
        System.out.println("--- flag = " + Integer.toHexString(flag) + ", hasA() = " + hasA() + ", hasB() = " + hasB());

        if(hasA())flag &= ~FLAG_A;
        System.out.println("--- flag = " + Integer.toHexString(flag) + ", hasA() = " + hasA() + ", hasB() = " + hasB());
        if(hasB())flag &= ~FLAG_B;
        System.out.println("--- flag = " + Integer.toHexString(flag) + ", hasA() = " + hasA() + ", hasB() = " + hasB());
         
    }

    public static boolean hasA(){
        return (0 != (flag & FLAG_A));    
    }

    public static boolean hasB(){
        return (0 != (flag & FLAG_B));    
    }

}

運行結果:

--- flag = 400000, hasA() = true, hasB() = false
--- flag = 480000, hasA() = true, hasB() = true
--- flag = 80000, hasA() = false, hasB() = true
--- flag = 0, hasA() = false, hasB() = false

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM