有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript Cordova上下左右按钮

我正在为安卓 4.4.2设备编写cordova应用程序。这台设备有一个遥控器,我需要在遥控器中按下向上向下、和-键

不幸的是,cordova只支持捕捉音量上升、音量下降、菜单、搜索和后退键(See documentation)的事件

所以我试着写我自己的插件,但不幸的是我被卡住了,不知道如何继续

Java部分(简化):

public OwnPlugin() {}

  public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    super.initialize(cordova, webView);
  }

  public boolean execute(final String action, JSONArray args, CallbackContext callbackContext) throws JSONException {

    if (action.equals("overrideUpButton")) {
      this.overrideUpButton(args.getBoolean(0));
    }
    return true;
  }

  public void overrideUpButton(boolean override) {
    webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_DPAD_UP, override);
  }
}

JS部分(简化):

cordova.define("com. ... ", function(require, exports, module) {
var exec = require('cordova/exec');

function OwnPlugin() {
}

OwnPlugin.prototype.overrideUpButton = function(override, onsucess, onfail){
 exec(onsucess, onfail, "OwnPlugin", "overrideUpButton" ,[ override ]);
};


 var ownPlugin = new OwnPlugin();
 module.exports = ownPlugin;
});

当试图用OwnPlugin.overrideUpButton(true);覆盖按钮时,这给了我一个例外:

E/PluginManager: Uncaught exception from plugin
E/PluginManager: java.lang.IllegalArgumentException: Unsupported keycode: 19
E/PluginManager:     at org.apache.cordova.CordovaWebViewImpl.setButtonPlumbedToJs(CordovaWebViewImpl.java:366)

好吧。。。这种方法行不通,因为我需要的按钮代码在CordovaWebViewImpl.java中不受支持

那我现在能做什么?如何捕获这些关键代码,从而防止默认操作,并在JavaScript中使用它们

  • 键盘_DPAD _向上
  • 键盘_DPAD _向下
  • 键盘_DPAD_左
  • 键盘_DPAD _右

共 (1) 个答案

  1. # 1 楼答案

    可以使用javascript捕捉这些键

    window.addEventListener("keydown", moveSomething, false);
     
    function moveSomething(e) {
        switch(e.keyCode) {
            case 37:
                // left key pressed
                break;
            case 38:
                // up key pressed
                break;
            case 39:
                // right key pressed
                break;
            case 40:
                // down key pressed
                break;  
        }   
    }