閱讀647 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android 中屏蔽 Home 鍵

原文:https://www.cnblogs.com/newcj/articles/2066337.html

public void onAttachedToWindow()
{  
       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
       super.onAttachedToWindow(); 	
}

在activity中加上這段代碼就可以屏蔽home,至於為什麼,因為android係統自己對與home鍵power鍵在PhoneWindowManager中做了處理,不會返回到上層應用的,但是我在看這部分代碼的時候看到:

\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java 1089行
 
if (code == KeyEvent.KEYCODE_HOME) {
 
            // If a system window has focus, then it doesn't make sense
            // right now to interact with applications.
            WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;
            if (attrs != null) {
                final int type = attrs.type;
                if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
                        || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
                    // the "app" is keyguard, so give it the key
                    return false;
                }
                final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
                for (int i=0; i<typeCount; i++) {
                    if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
                        // don't do anything, but also don't pass it to the app
                        return true;
                    }
                }
            }

type == WindowManager.LayoutParams.TYPE_KEYGUARD這一句,我們可以看到,android對於鎖屏特殊判斷了,所以我就模擬這個進行的實現,隻是有一點,activity中重寫onAttachedToWindow()方法需要api 5以上。

最後更新:2017-04-02 22:16:24

  上一篇:go 《android2.2自帶通訊錄》之聯係人按拚音排序以及按漢字首字母或全拚搜索
  下一篇:go android直接讀取項目中的sqlite數據庫