3

I'm trying to register directional pad / tv remote d pad clicks in my android app. I'm currently testing with the android emulator and I'm trying to click with the directional pad input under the extra settings menu. But I'm not sure why this doesn't work - any help would be appreciated

public class FullscreenActivity extends AppCompatActivity {

    private View mContentView;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_fullscreen);

            mContentView = findViewById(R.id.fullscreen_content);

            mContentView.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    Log.d("debug", "we are here");
                    if (event.getAction() == KeyEvent.ACTION_DOWN)
                        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
                            Log.d("keycode", "center pressed");
                            return true;
                        }
                    switch (keyCode) {
                        case KeyEvent.KEYCODE_DPAD_UP:
                        case KeyEvent.KEYCODE_DPAD_DOWN:
                        case KeyEvent.KEYCODE_DPAD_RIGHT:
                        case KeyEvent.KEYCODE_DPAD_LEFT:
                        case KeyEvent.KEYCODE_DPAD_CENTER:
                            Log.d("OnKey", "key pressed!");
                            return true;
                    }
                    return false;
                }
            });
        }
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            return super.onKeyDown(keyCode, event);
        }
}

running this code gives me no output whatsoever on logcat

Anindya Basu
  • 659
  • 1
  • 6
  • 18

1 Answers1

2

You can override onKeyDown() method of your activity to detect key press.

Try this

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

    if (event.getAction() == KeyEvent.ACTION_DOWN) {

        switch (event.getKeyCode()) {
            case  KeyEvent.KEYCODE_DPAD_UP:
                 showToast("UP pressed");
            return true;
            case  KeyEvent.KEYCODE_DPAD_DOWN:
                 showToast("DOWN pressed");
            return true;
            case  KeyEvent.KEYCODE_DPAD_RIGHT:
                 showToast("RIGHT pressed");
            return true;
            case  KeyEvent.KEYCODE_DPAD_LEFT:
                 showToast("LEFT pressed");
            return true;
            case  KeyEvent.KEYCODE_DPAD_CENTER:
                 showToast("CENTER pressed");
            return true;
           }
         }
        return super.onKeyDown(keyCode, event);
  }

  void showToast(String msg)
  {
    Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show();
  } 
Ajith Pandian
  • 1,332
  • 13
  • 21
  • so do I not need to register a onkeylistener to my mcontentview? can you please explain why this is? – Anindya Basu Sep 15 '16 at 18:53
  • If you want to provide navigation between views and if you want to access keypress event throughout the activity you can use onKeyDown() method. View.OnKeyListener can be used for a key event that dispatched to that view only. – Ajith Pandian Sep 15 '16 at 19:41