Android Home鍵的監(jiān)聽和攔截

昨天需要處理一個問題,需要監(jiān)聽home鍵。最開始想到使用onKeydonwn這個方法描孟。但是發(fā)現(xiàn)home不能這樣處理驶睦,onKeydonwn可以處理菜單鍵和back鍵,但home不能匿醒。因為home鍵是系統(tǒng)鍵啥繁,情況特殊一些∏嗯祝看了一下網(wǎng)上的資料旗闽,最后發(fā)現(xiàn)以下方法可以。

使用廣播的方式來進行監(jiān)聽:

package com.mengdd.hellohome;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class HomeWatcherReceiver extends BroadcastReceiver {
    private static final String LOG_TAG = "HomeReceiver";
    private static final String SYSTEM_DIALOG_REASON_KEY = "reason";
    private static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
    private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
    private static final String SYSTEM_DIALOG_REASON_LOCK = "lock";
    private static final String SYSTEM_DIALOG_REASON_ASSIST = "assist";

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.i(LOG_TAG, "onReceive: action: " + action);
        if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
            // android.intent.action.CLOSE_SYSTEM_DIALOGS
            String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
            Log.i(LOG_TAG, "reason: " + reason);

            if (SYSTEM_DIALOG_REASON_HOME_KEY.equals(reason)) {
                // 短按Home鍵
                Log.i(LOG_TAG, "homekey");

            }
            else if (SYSTEM_DIALOG_REASON_RECENT_APPS.equals(reason)) {
                // 長按Home鍵 或者 activity切換鍵
                Log.i(LOG_TAG, "long press home key or activity switch");

            }
            else if (SYSTEM_DIALOG_REASON_LOCK.equals(reason)) {
                // 鎖屏
                Log.i(LOG_TAG, "lock");
            }
            else if (SYSTEM_DIALOG_REASON_ASSIST.equals(reason)) {
                // samsung 長按Home鍵
                Log.i(LOG_TAG, "assist");
            }

        }
    }

}

廣播接收器的注冊有兩種方式,一種是靜態(tài)注冊,即寫在manifest里面聲明;另一種是動態(tài)注冊,即在Java代碼里面注冊.

靜態(tài)注冊:
<application ....>
         ....
        <receiver android:name="com.mengdd.hellohome.HomeWatcherReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.CLOSE_SYSTEM_DIALOGS" />
            </intent-filter>
        </receiver>
        ....
</application>
動態(tài)注冊:
  private static HomeWatcherReceiver mHomeKeyReceiver = null;

    private static void registerHomeKeyReceiver(Context context) {
        Log.i(LOG_TAG, "registerHomeKeyReceiver");
        mHomeKeyReceiver = new HomeWatcherReceiver();
        final IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

        context.registerReceiver(mHomeKeyReceiver, homeFilter);
    }

    private static void unregisterHomeKeyReceiver(Context context) {
        Log.i(LOG_TAG, "unregisterHomeKeyReceiver");
        if (null != mHomeKeyReceiver) {
            context.unregisterReceiver(mHomeKeyReceiver);
        }
    }

然后在activity的OnResume和OnDePause中注冊和解除綁定

 @Override
    protected void onResume() {
        super.onResume();

        registerHomeKeyReceiver(this);
    }

    @Override
    protected void onPause() {

        unregisterHomeKeyReceiver(this);
        super.onPause();
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜜另,一起剝皮案震驚了整個濱河市适室,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌举瑰,老刑警劉巖捣辆,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異此迅,居然都是意外死亡汽畴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門耸序,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忍些,“玉大人,你說我怎么就攤上這事坎怪“瞻樱” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵搅窿,是天一觀的道長嘁酿。 經(jīng)常有香客問我,道長男应,這世上最難降的妖魔是什么闹司? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮沐飘,結(jié)果婚禮上游桩,老公的妹妹穿的比我還像新娘。我一直安慰自己薪铜,他們只是感情好众弓,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隔箍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脚乡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天伞梯,我揣著相機與錄音盐肃,去河邊找鬼。 笑死捡遍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的竹握。 我是一名探鬼主播画株,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啦辐!你這毒婦竟也來了谓传?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤芹关,失蹤者是張志新(化名)和其女友劉穎续挟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侥衬,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡诗祸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了轴总。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片直颅。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怀樟,靈堂內(nèi)的尸體忽然破棺而出际乘,到底是詐尸還是另有隱情,我是刑警寧澤漂佩,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布脖含,位于F島的核電站,受9級特大地震影響投蝉,放射性物質(zhì)發(fā)生泄漏养葵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一瘩缆、第九天 我趴在偏房一處隱蔽的房頂上張望关拒。 院中可真熱鬧,春花似錦庸娱、人聲如沸着绊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽归露。三九已至,卻和暖如春斤儿,著一層夾襖步出監(jiān)牢的瞬間剧包,已是汗流浹背恐锦。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疆液,地道東北人一铅。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像堕油,于是被迫代替她去往敵國和親潘飘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,838評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理掉缺,服務(wù)發(fā)現(xiàn)卜录,斷路器,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 面試題總結(jié) 通用 安卓學(xué)習(xí)途徑, 尋找資料學(xué)習(xí)的博客網(wǎng)站 AndroidStudio使用, 插件使用 安卓和蘋果的...
    JingBeibei閱讀 1,658評論 2 21
  • Android手機HOME鍵的監(jiān)聽一直是個很頭疼的問題攀圈,系統(tǒng)禁止用戶重寫HOME鍵的監(jiān)聽方法暴凑,就導(dǎo)致部分手機可能出...
    卓技卓品閱讀 3,159評論 0 2
  • 除了自己,沒有人有理由讓你高興
    喜愛五閱讀 166評論 0 1