Android平台下cordova的menubutton事件

开发环境:

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');
}

写完,休息了


请关注我的新浪微博 width="100%" height="120" class="share_self" frameborder="0" scrolling="no" src="http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=120&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=0&isFans=0&uid=2237047381&verifier=f873c807&dpc=1">

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值