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;
}
}
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With