android TV開發屏蔽home鍵和其他按鍵

一、首先談一下HOME鍵(主頁鍵),因爲HOME鍵比較特殊,根據系統的不同處理,來處理的,以下是我常用的方式

1、系統廣播方式

private HomeKeyBroadcastReceiver mHomeKeyBroadcastReceiver;
//註冊監聽hone鍵廣播
if (mHomeKeyBroadcastReceiver == null) {
    mHomeKeyBroadcastReceiver = new HomeKeyBroadcastReceiver();
    registerReceiver(mHomeKeyBroadcastReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
}
//註銷監聽hone鍵廣播。防止內存泄漏
if (mHomeKeyBroadcastReceiver != null) {
    unregisterReceiver(mHomeKeyBroadcastReceiver);
    mHomeKeyBroadcastReceiver = null;
}
  class HomeKeyBroadcastReceiver extends BroadcastReceiver {
        private final String SYSTEM_REASON = "reason";
        private final String SYSTEM_HOME_KEY = "homekey";// home key

        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
                String reason = intent.getStringExtra(SYSTEM_REASON);
                if (TextUtils.equals(reason, SYSTEM_HOME_KEY)) {
                    //做相應的邏輯,比如退出應用,殺死進程
                }
            }
        }
    }
}

2、onkey事件來監聽,可以用onkeydown,也可以用dispatchKeyEvent,一個道理,這裏寫dispatchKeyEvent方法的使用

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_UP) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_HOME) {
            //做相應的邏輯,比如退出應用,殺死進程
        }
    }}
這裏用ACTION_UP和ACTION_DOWN,都可以,不過還是要看使用場景是怎麼樣的

其他按鍵,其實有兩種方式,一種是onkey事件,一種是dispatchKeyEvent,最開始接觸的同學,可能都會先用onkey事件,比如onKeyDown和onKeyUp,不過Android TV開發時間久了,dispatchKeyEvent事件也得知道,因爲是根據一些特別的情況,例如要通過接口回調,來進行按鍵事件的傳遞,舉個例子,可能寫了一個工具類,專門用來做些事件的處理,這個時候,你要是用onKeyDown,就比較費事,還不如直接傳遞KeyEvent,直接按下和擡起的事件都傳遞了,節省代碼行數,下面我寫一個簡單的用法示例

 @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        try {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN) {
                    //下鍵
                    return true;
                } else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
                    //上鍵
                    return true;
                } else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) {
                    //左鍵
                    return true;
                } else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
                    //右鍵
                    return true;
                } else if (event.getKeyCode() == KeyEvent.KEYCODE_BACK || event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE) {
                    //返回鍵,不同設備鍵值可能不一樣,最好兼容
                    return true;
                } else if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER || event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER) {
                    //確認鍵,不同設備鍵值可能不一樣,最好兼容
                    return true;
                } else if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
                    //菜單鍵
                    return true;
                }
            }
            //ACTION_UP同理
        } catch (Exception e) {
            Log.e(TAG, "dispatchKeyEvent:Exception:" + e.toString());
        }
        return super.dispatchKeyEvent(event);
    }

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章