1. 程式人生 > >Android完美解決監聽home鍵

Android完美解決監聽home鍵

以下兩種方法可以完美解決監聽back鍵,home鍵,多工鍵(最近任務鍵)。

一、使用註冊廣播監聽home鍵、多工鍵

演示圖

這裡寫圖片描述


建立一個廣播程式碼如下:

    class InnerRecevier extends BroadcastReceiver {

        final String SYSTEM_DIALOG_REASON_KEY = "reason";

        final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";

        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"
; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) { String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY); if
(reason != null) { if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) { Toast.makeText(MainActivity.this, "Home鍵被監聽", Toast.LENGTH_SHORT).show(); } else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) { Toast.makeText(MainActivity.this
, "多工鍵被監聽", Toast.LENGTH_SHORT).show(); } } } } }



在Activity中的onCreate()方法中註冊廣播,程式碼如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //建立廣播
        InnerRecevier innerReceiver = new InnerRecevier();
        //動態註冊廣播
        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        //啟動廣播
        registerReceiver(innerReceiver, intentFilter);
    }

這樣的話,就ok了。這種方式能對home鍵與多工鍵實現全盤監聽,但你無法去遮蔽系統的行為。

二、重寫onKeyDown()監聽、遮蔽back鍵、home鍵

在Activity中重寫onKeyDown(),程式碼如下:

  @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Toast.makeText(MainActivity.this, "返回鍵無效", Toast.LENGTH_SHORT).show();
            return true;//return true;攔截事件傳遞,從而遮蔽back鍵。
        }
        if (KeyEvent.KEYCODE_HOME == keyCode) {
            Toast.makeText(getApplicationContext(), "HOME 鍵已被禁用...", Toast.LENGTH_SHORT).show();
            return true;//同理
        }
        return super.onKeyDown(keyCode, event);
    }



在Activity中onCreate()中新增程式碼,程式碼如下:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在setContentView之前新增,未新增的話home鍵監聽無效,設定窗體屬性
        this.getWindow().setFlags(0x80000000, 0x80000000);
        setContentView(R.layout.activity_main);
    }