(轉(zhuǎn))Recent鍵及狀態(tài)欄屏蔽

轉(zhuǎn)自:http://blog.csdn.net/codezjx/article/details/45542137

Back鍵和Home鍵的屏蔽可以看我這篇貼:http://blog.csdn.NET/codezjx/article/details/45485975

Home鍵與Recent鍵的點擊事件是在framework層進行處理的樊诺,因此onKeyDown與dispatchKeyEvent都捕獲不到點擊事件煌茬。
查看StatusBarManager.Java源碼牺堰,目前只能通過其void disable(int what) {…}設置,并可傳入值:

public static final int DISABLE_HOME = View.STATUS_BAR_DISABLE_HOME;  
public static final int DISABLE_RECENT = View.STATUS_BAR_DISABLE_RECENT;  
public static final int DISABLE_BACK = View.STATUS_BAR_DISABLE_BACK;  
public static final int DISABLE_NONE = 0x00000000;  

等等… 具體值可以查view的源碼,因為都是@hide的
首先想到了反射機制來進行調(diào)用:(或者使用移除了@hide的API 庫classes.jar)

public static final String STATUS_BAR_SERVICE = “statusbar”;  
public static final String CLASS_STATUS_BAR_MANAGER = “android.app.StatusBarManager”;  
public static final String METHOD_DISABLE = “disable”;  
try {  
    Object service = getSystemService(STATUS_BAR_SERVICE);  
    Class <?> statusBarManager = Class.forName(CLASS_STATUS_BAR_MANAGER);  
    Method disable = statusBarManager.getMethod(METHOD_DISABLE, int.class);  
    disable.invoke (service, 0x01000000); //為View.STATUS_BAR_DISABLE_RECENT的值  
} catch (Exception e) {  
    e.printStackTrace();  
}  

會報出以下錯誤提示:
Neither user 10076 nor current process has Android.permission.STATUS_BAR.
提示缺少權(quán)限帐我,Manifest添加之许赃,提示:Permission is only granted to system apps
總結(jié):通過這種方法屏蔽狀態(tài)欄下拉跟压,必須得有系統(tǒng)簽名扒袖,WTF塞茅。。僚稿。

后續(xù):參考了一些鎖屏軟件,如小米百變鎖屏蟀伸、Go鎖屏等蚀同,他們在鎖屏的時候也沒有屏蔽掉Recent鍵和狀態(tài)欄下拉缅刽。而是在點擊按鍵后迅速將彈出的Dialog和Window收回去,其實這也可以看作另一種應急解決方法蠢络。繼續(xù)回去看StatusBarManager.java源碼:發(fā)現(xiàn)了另外一個方法衰猛,public void collapse() {…}和public void expand() {…},其中collapse為收縮的方法刹孔,expand為展開方法啡省,而且調(diào)用這兩個方法不需要系統(tǒng)簽名。用上面的反射方法繼續(xù)調(diào)用之:
注意:點擊Recent鍵彈出dialog會回調(diào)onWindowFocusChanged()髓霞,因此可在該方法中調(diào)用:

public void onWindowFocusChanged(boolean hasFocus) {  
    super.onWindowFocusChanged(hasFocus);  
    if(!hasFocus) {  
        ……  
        Method collapse = statusBarManager.getMethod(METHOD_COLLAPSE);  
        collapse.invoke(service);  
        ……  
    }  
}  

加入權(quán)限:

<uses-permission android:name=”android.permission.EXPAND_STATUS_BAR”/>

后面又發(fā)現(xiàn)了另一種方法卦睹,更加簡便,同樣是點擊后迅速消失(還可以隱藏長按電源的彈出框):

sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));

可以通過View焦點丟失的情況下去觸發(fā)方库,發(fā)送該廣播结序,如:

class MyView extends View {  
  
    public MyView(Context pContext) {  
        super(pContext);  
    }  
  
    @Override  
    public void onWindowFocusChanged(boolean pHasWindowFocus) {  
        super.onWindowFocusChanged(pHasWindowFocus);  
        if (!pHasWindowFocus) {  
            mContext.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));  
        }  
    }  
}  

狀態(tài)欄的隱藏:

方法一:

// 隱藏(但點擊menu會恢復,然后又自動隱藏)
getWindow().getDecorView().setSystemUiVisibility(Window.FEATURE_ACTION_BAR_OVERLAY); 
// 顯示
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
  
// (用這個type可以將按鈕變成小圓點:View.SYSTEM_UI_FLAG_LOW_PROFILE)
WindowManager.LayoutParams params = window.getAttributes();  
params.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE;  
window.setAttributes(params);  

方法二:
隱藏:進入\system\目錄纵潦,編輯build.prop徐鹤,在最后一行添加qemu.hw.mainkeys=1,保存重啟即可邀层。
顯示:改成qemu.hw.mainkeys=0返敬,保存重啟即可。

方法三:
參考一個叫GMD Hide Bar的軟件寥院。反編譯了他的源碼劲赠,他是用命令行直接干掉SystemUI這個進程來達到隱藏目的的。大家可以嘗試直接在DDMS中關閉:com.android.systemui這個進程只磷,狀態(tài)欄直接消失经磅,不過一段時間后又會自動運行。因此需要運行后臺線程不斷執(zhí)行關閉操作钮追,比較耗資源预厌,且需要root權(quán)限。

// 隱藏
int k = getPid();  
if (k > 0)  
ProcessUtil.execAsRoot(“kill -s CONT ” + k);  

// 顯示
ProcessUtil.execAsApp(“am startservice -n com.android.systemui/.SystemUIService”);  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末元媚,一起剝皮案震驚了整個濱河市轧叽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刊棕,老刑警劉巖炭晒,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異甥角,居然都是意外死亡网严,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門嗤无,熙熙樓的掌柜王于貴愁眉苦臉地迎上來震束,“玉大人怜庸,你說我怎么就攤上這事」复澹” “怎么了割疾?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嘉栓。 經(jīng)常有香客問我宏榕,道長,這世上最難降的妖魔是什么侵佃? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任麻昼,我火速辦了婚禮,結(jié)果婚禮上趣钱,老公的妹妹穿的比我還像新娘涌献。我一直安慰自己,他們只是感情好首有,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布燕垃。 她就那樣靜靜地躺著,像睡著了一般井联。 火紅的嫁衣襯著肌膚如雪卜壕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天烙常,我揣著相機與錄音轴捎,去河邊找鬼。 笑死蚕脏,一個胖子當著我的面吹牛侦副,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驼鞭,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秦驯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挣棕?” 一聲冷哼從身側(cè)響起译隘,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洛心,沒想到半個月后固耘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡词身,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年厅目,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡损敷,死狀恐怖户辫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗤锉,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布墓塌,位于F島的核電站瘟忱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏苫幢。R本人自食惡果不足惜访诱,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望韩肝。 院中可真熱鬧触菜,春花似錦、人聲如沸哀峻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剩蟀。三九已至催蝗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間育特,已是汗流浹背丙号。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缰冤,地道東北人犬缨。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像棉浸,于是被迫代替她去往敵國和親怀薛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • Android鎖屏實現(xiàn)與總結(jié)(網(wǎng)易云閱讀) 一涮拗、自定義鎖屏基本原理 二乾戏、重要步驟 1、廣播注冊 2三热、Activit...
    吳小博Toby閱讀 44,821評論 15 55
  • 3-6個月寶寶最適合玩的游戲: 扔東西:0·1歲寶寶正是精細動作發(fā)育關鍵期鼓择,寶寶喜歡扔東西,是因為他們發(fā)現(xiàn)每次扔出...
    峮子說閱讀 613評論 1 6