3.6.0版本apk包BUG,switch、ps手柄按键无安卓回调

不好意思,刚看到,下午我试下。顺便记录具体按键发论坛里。

Ps按键 Ns按键 安卓编码
左摇杆上 左摇杆上
左摇杆下 左摇杆下
左摇杆左 左摇杆左
左摇杆右 左摇杆右
右摇杆上 右摇杆上
右摇杆下 右摇杆下
右摇杆左 右摇杆左
右摇杆右 右摇杆右
右方按键上 右方按键上 100
右方按键左 右方按键左 97
右方按键右 右方按键右 96
右方按键下 右方按键下 99
Share - 109
options + 108
L1 L 102
L2 ZL 104
R1 R 103
R2 ZR 105

修改之后还是不行,有写编码的有回调。

还是未解决

  1. 可以看下AppActivity.java是如何处理 onKeyUp, onKeyDown?
  2. 若果之前有些按键响应不到,参考上个修复pr后,有些按键有响应(或在cookGameActivityKeyEvent中断点看下是否有对应的按键消息),那
    可以参考 https://github.com/cocos/cocos-engine/pull/12744中 INPUT_KEY_ACTIONS 配置 编码和引擎的对应关系,如:
    {AKEYCODE_BUTTON_Y, static_cast(KeyCode::DPAD_UP)},
    {AKEYCODE_BUTTON_B, static_cast(KeyCode::DPAD_LEFT)},
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // 获取该设备的id
        int deviceId = event.getDeviceId();
        JSONObject jsonObject = this.getDeviceJson(deviceId);
        if(jsonObject != null){
            try {
                jsonObject.put("inputType","KEY_DOWN");
                jsonObject.put("code",event.getKeyCode());
            } catch (JSONException e) {
                e.printStackTrace();
            }
            JsbBridge.sendToScript("ANDROID_INPUT", jsonObject.toString());
        }
        return super.onKeyDown(keyCode, event);
    }

直接重写方法,输出event.getKeyCode()的。3.5.1同样代码,编码输出正常,3.6.0按上表,大部分按键就无keydown调用了。

工程中使用的targetApi是否也不一样,分别是多少

另外,可以看下AndroidPlatform.cpp
cookGameControllerEvent
看是否有其他按键走这里,这个是处理手柄相关。
可以在 PADDLEBOAT_ACTIONS 添加其他事件,如:
{PADDLEBOAT_BUTTON_L1, static_cast(KeyCode::DPAD_UP)},

按键 NS 3.5.2编码 NS 3.6.0编码 PS 3.5.2编码 ps 3.6.0编码
19 19
20 20
21 21
22 22
右方按键上 100/62 100 99/67 99
右方按键下 96/23 96 97/4 97
右方按键左 99/67 99 96/23 96
右方按键右 97/4 97 返回到某个菜单 返回到某个菜单
左摇杆上 19/dispatchGeneric dispatchGeneric 19/dispatchGeneric dispatchGeneric
左摇杆下 20/dispatchGeneric dispatchGeneric 20/dispatchGeneric dispatchGeneric
左摇杆左 21/dispatchGeneric dispatchGeneric 21/dispatchGeneric dispatchGeneric
左摇杆右 22/dispatchGeneric dispatchGeneric 22/dispatchGeneric dispatchGeneric
右摇杆上 dispatchGeneric dispatchGeneric dispatchGeneric dispatchGeneric
右摇杆下 dispatchGeneric dispatchGeneric dispatchGeneric dispatchGeneric
右摇杆左 dispatchGeneric dispatchGeneric dispatchGeneric dispatchGeneric
右摇杆右 dispatchGeneric dispatchGeneric dispatchGeneric dispatchGeneric
- 109/82 109
+ 108/23 108
L 102 102 100/62 100
ZL 104 104 102 102
R 103 103 101/23 101
ZR 105 105 103 103

重新测试了下。3.6.0就上下左右无keydown、keyup回调,其它有些是改了编码。摇杆keydown3.6.0没了,但可用dispatchGenericMotionEvent来监听。
按git修改c++文件,keydown还是无调用。
targetApi都是用的android-28。
稍后我看看AndroidPlatform有没走。

请问测试结果如何?合并 pr 后能解决问题么?

还是未解决,麻烦再帮忙看看。
现在情况是手柄所有按钮cookGameActivityKeyEvent无调用,cookGameControllerEvent有调用。cookGameControllerEvent内打印输出controllerData.buttonsDown,右边按键,肩键输出32、64、128等不同数值。
左边方向键,只输出0。

还是未解决,麻烦看看。

好的,这个问题已经提交 issues 给相关引擎工程师在处理了,后续修复进展可以查看 issues:https://github.com/cocos/cocos-engine/issues/12820

我们这边没有你的手柄,可以参考下GameController.cpp
processKeyEventInternal 看下对应的code是否有处理,没有的话添加下

GameController.cpp内processKeyEventInternal 测试,左边按键方向键无调用此方法,无输出。
其他按键有调用输出。
这边还有啥零时的解决方法么?

你好,参考以下两个pr, 合并完成后,我这边用设备测试,onKeyDown里面几个方向键都有响应到了。麻烦验证下,有结论的话给下反馈谢谢。


左方向键还是无安卓onkey的调用。
有个疑问,左边方向键按上下左右为什么会有和摇杆一样的dispatchGenericMotionEvent的调用,其它按钮没有?
按钮回调映射错了?

请参考 #20#24的回复,然后修改下你的targetApi, 在local.properties, 设置成已经3.5的,然后在验证下,其他方面和3.5是完全一样了。

手柄按键监听正常了嘛?我这边按键还是没反应。

修改后,手柄按键还是没反应,只有上下左右键有输出,摇杆与左侧按键都没反应。使用的版本为3.6.2。

能帮忙看看嘛,目前就等按键调通,产品就能上线了~~