Android平台下cordova的menubutton事件

开发环境:

Android Studio,cordova版本5.3.3


问题描述:

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


问题分析:

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


问题解决:

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

修改1:CoreAndroid.java

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

  1. @Override
  2. public void setButtonPlumbedToJs(int keyCode, boolean override) {
  3. switch (keyCode) {
  4. case KeyEvent.KEYCODE_VOLUME_DOWN:
  5. case KeyEvent.KEYCODE_VOLUME_UP:
  6. case KeyEvent.KEYCODE_BACK:
  7. case KeyEvent.KEYCODE_MENU:
  8. // TODO: Why are search and menu buttons handled separately?
  9. if (override) {
  10. boundKeyCodes.add(keyCode);
  11. } else {
  12. boundKeyCodes.remove(keyCode);
  13. }
  14. return;
  15. default:
  16. throw new IllegalArgumentException( "Unsupported keycode: " + keyCode);
  17. }
  18. }
修改3:cordova.js

  1. // Add hardware MENU and SEARCH button handlers
  2. //cordova.addDocumentEventHandler('menubutton');
  3. cordova.addDocumentEventHandler( 'searchbutton');
  4. function bindButtonChannel(buttonName) {
  5. // generic button bind used for volumeup/volumedown buttons
  6. var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button');
  7. volumeButtonChannel.onHasSubscribersChange = function() {
  8. exec( null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]);
  9. };
  10. }
  11. // Inject a listener for the volume buttons on the document.
  12. bindButtonChannel( 'volumeup');
  13. bindButtonChannel( 'volumedown');
  14. bindButtonChannel( 'menu');

使用方法同volumeup和volumedown一致:

  1. document.addEventListener( 'deviceready', function(){
  2. document.addEventListener( 'menubutton',menuKeyDown, false);
  3. }, false);
  4. function menuKeyDown(){
  5. alert( 'menuKeyDown');
  6. }

文章转载自:https://blog.csdn.net/wang_song_yan/article/details/50205803#commentBox

原作者:wang_song_yan

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值