Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android NDK Capturing Key Events

I have an Android NDK game (NDK 4.) Almost all of the code is in C++ (it's a port) so in the Java all I have is an Activity and a GLSurfaceView with an override for onTouchEvents. I'm trying to figure out how to receive key press events so that I can forward them on to the native code to be handled.

I tried having the View implement OnKeyListener but onKey() is never called. Also tried overriding the onKeyDown() and onKeyUp() in the View with no success. Am I missing something?

Update

The View as I'm currently using it:

public class FooView extends GLSurfaceView implements SurfaceHolder.Callback, OnKeyListener
{
    private GameRenderer _renderer;
    private GameListener _listener;

    public FooView(Context context)
    {
        super(context);
        this._renderer = new GameRenderer();
        setRenderer(this._renderer);
        this._listener = new GameListener(context);
        BaseLib.setListener(this._listener);
    }

    @Override
    public boolean onTouchEvent(final MotionEvent event)
    {
        // touch code...
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        Log.d("testing", "onKeyDown event from Java");
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event)
    {
        Log.d("testing", "onKeyUp event from Java");
        return super.onKeyUp(keyCode, event);
    }

    @Override
    public boolean onKey(View view, int keyCode, KeyEvent event)
    {
        Log.d("testing", "onKey event from Java");
        return true;
    }
}
like image 616
Nick Gotch Avatar asked Feb 04 '26 20:02

Nick Gotch


1 Answers

Try this:

  @Override
  public boolean dispatchKeyEvent(KeyEvent event)
  {
          //
          // SEND event.getAction() to your NDK code
          //
          if(<NDK CODE PROCESSED IT>) return true;

          // default behavior for everything else
          return super.dispatchKeyEvent(event);
  }
like image 58
Femi Avatar answered Feb 06 '26 11:02

Femi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!