您的位置:首页 > 移动开发 > Android开发

Android平台下cordova的menubutton事件

2015-12-07 15:03 459 查看
开发环境:

Android Studio,cordova版本5.3.3

问题描述:

经过代码测试发现,menubutton事件绑定后点击无效果

问题分析:

不知道出于什么原因,代码里面并未添加menubutton的注册代码

问题解决:

从按钮点击事件来看, volumedownbutton,volumeupbutton,backbutton,menubutton事件都是一样的,但是CoreAndroid实现上把返回键与音量加减键区分开,注册方法分别为overrideBackbutton和overridebutton方法。接下来我简单地把menubutton用音量加减的方式进行修改。

修改1:CoreAndroid.java

public void overrideButton(String button, boolean override) {
LOG.i("App", "WARNING: Volume Button Default Behavior will be overridden.  The volume event will be fired!");
if (button.equals("volumeup")) {
webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_UP, override);
}
else if (button.equals("volumedown")) {
webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_DOWN, override);
}
else if (button.equals("menu")) {
webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_MENU, override);
}
}
修改2:CordovaWebViewImpl.java

@Override
public void setButtonPlumbedToJs(int keyCode, boolean override) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_BACK:
case KeyEvent.KEYCODE_MENU:
// TODO: Why are search and menu buttons handled separately?
if (override) {
boundKeyCodes.add(keyCode);
} else {
boundKeyCodes.remove(keyCode);
}
return;
default:
throw new IllegalArgumentException("Unsupported keycode: " + keyCode);
}
}
修改3:cordova.js

// Add hardware MENU and SEARCH button handlers
//cordova.addDocumentEventHandler('menubutton');
cordova.addDocumentEventHandler('searchbutton');

function bindButtonChannel(buttonName) {
// generic button bind used for volumeup/volumedown buttons
var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button');
volumeButtonChannel.onHasSubscribersChange = function() {
exec(null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]);
};
}
// Inject a listener for the volume buttons on the document.
bindButtonChannel('volumeup');
bindButtonChannel('volumedown');
bindButtonChannel('menu');


使用方法同volumeup和volumedown一致:

document.addEventListener('deviceready', function(){
document.addEventListener('menubutton',menuKeyDown,false);
},false);

function menuKeyDown(){
alert('menuKeyDown');
}


写完,休息了

请关注我的新浪微博
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: