AndroidTV開發中所有的遙控器按鍵監聽及注意事項,新增home鍵監聽

傑克.陳發表於2018-10-26
原文:Android TV開發中所有的遙控器按鍵監聽及注意事項,新增home鍵監聽

簡單記錄下android 盒子開發遙控器的監聽 ,希望能幫到新入門的朋友們

不多說,直接貼程式碼
public class MainActivity extends Activity {

    private String  TAG="key";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        switch (keyCode) {

           case KeyEvent.KEYCODE_ENTER:     //確定鍵enter
           case KeyEvent.KEYCODE_DPAD_CENTER:
               Log.d(TAG,"enter--->");

              break;

           case KeyEvent.KEYCODE_BACK:    //返回鍵
               Log.d(TAG,"back--->");

               return true;   //這裡由於break會退出,所以我們自己要處理掉 不返回上一層

           case KeyEvent.KEYCODE_SETTINGS: //設定鍵
               Log.d(TAG,"setting--->");

               break;

           case KeyEvent.KEYCODE_DPAD_DOWN:   //向下鍵

                /*    實際開發中有時候會觸發兩次,所以要判斷一下按下時觸發 ,鬆開按鍵時不觸發
                 *    exp:KeyEvent.ACTION_UP
                 */
                 if (event.getAction() == KeyEvent.ACTION_DOWN){   

                    Log.d(TAG,"down--->");
                }

                 break;

           case KeyEvent.KEYCODE_DPAD_UP:   //向上鍵
               Log.d(TAG,"up--->");

               break;

           case     KeyEvent.KEYCODE_0:   //數字鍵0
               Log.d(TAG,"0--->");

               break;

           case KeyEvent.KEYCODE_DPAD_LEFT: //向左鍵

               Log.d(TAG,"left--->");

               break;

           case KeyEvent.KEYCODE_DPAD_RIGHT:  //向右鍵
               Log.d(TAG,"right--->");
                break;

           case KeyEvent.KEYCODE_INFO:    //info鍵
               Log.d(TAG,"info--->");

               break;

           case KeyEvent.KEYCODE_PAGE_DOWN:     //向上翻頁鍵
            case KeyEvent.KEYCODE_MEDIA_NEXT:
                  Log.d(TAG,"page down--->");

                break;


            case KeyEvent.KEYCODE_PAGE_UP:     //向下翻頁鍵
            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
                  Log.d(TAG,"page up--->");

                break;

            case KeyEvent.KEYCODE_VOLUME_UP:   //調大聲音鍵
                 Log.d(TAG,"voice up--->");

                break;

            case KeyEvent.KEYCODE_VOLUME_DOWN: //降低聲音鍵
                 Log.d(TAG,"voice down--->");

                 break;
             case KeyEvent.KEYCODE_VOLUME_MUTE: //禁用聲音
                  Log.d(TAG,"voice mute--->");
                 break;

            break;
          default:
             break;
        }

        return super.onKeyDown(keyCode, event);

    }

}

效果如下:

基本按鍵觸發

home鍵的監聽要監聽廣播:

 class  HomeRecaiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if(action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){

                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
                if(SYSTEM_DIALOG_REASON_HOME_KEY.equals(reason)){
                    Toast.makeText(MainActivity.this,"home鍵觸發",0).show();
                    Log.d(TAG, "home鍵觸發");
                }
            }
        }

    }

在oncreate()註冊廣播

    public final String SYSTEM_DIALOG_REASON_KEY = "reason";
    public final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
    /**
     * 註冊廣播
     */
    private void initReceiver() {

        homeReceiver = new HomeRecaiver();
        IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        registerReceiver(homeReceiver, filter);
    }

退出登出廣播

@Override
    protected void onDestroy() {
        super.onDestroy();
        if(homeReceiver!=null){
            unregisterReceiver(homeReceiver);
        }
    }


相關文章