最近在对接Cocos工程,遇到了一个小问题,物理返回键点击不起作用,没办法只能自己查原因了。
首先看了下页面继承的Cocos2dxActivity,以为它屏蔽了onBackPressed/onKeyDown,但未发现其重写。
后来发现其实cocos的页面是空值surfaceview完成页面渲染等工作,怀疑是其屏蔽了onKeyDown
找到lib/Cocos2dxGLSurfaceView.java的onKeyDown,然后添加代码 return false; 就可以解除拦截了
@Override
public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) {
switch (pKeyCode) {
case KeyEvent.KEYCODE_BACK:
Cocos2dxVideoHelper.mVideoHandler.sendEmptyMessage(Cocos2dxVideoHelper.KeyEventBack);
return false; // 添加代码,去除拦截,防止android物理返回键失效
case KeyEvent.KEYCODE_MENU:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_ENTER:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
case KeyEvent.KEYCODE_DPAD_CENTER:
this.queueEvent(new Runnable() {
@Override
public void run() {
Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);
}
});
return true;
default:
return super.onKeyDown(pKeyCode, pKeyEvent);
}
}