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
使用方法同volumeup和volumedown一致:
写完,休息了
请关注我的新浪微博
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'); }
写完,休息了
请关注我的新浪微博
相关文章推荐
- android动画基础
- listview adapter 常用适配器
- android(34)(有序广播、无序广播、中断特定号码广播、监听SD卡状态、横竖屏切换)
- 【Android游戏开发之一】搭建开发环境以HelloWorld例程
- 解决Android5.0及以上启动Service时,java.lang.IllegalArgumentException: Service Intent must be explicit
- 美团Android资源混淆保护实践
- android实现多线程下载
- 一个牛逼哄哄的Android框架One,秒杀最火的Xutils
- Android使用Handler造成内存泄露的分析及解决方法
- 使用天天模拟器开发Android应用
- Android中SharedPreferences的总结
- Android 属性动画(Property Animation)
- Android SDK 在线更新镜像服务器资源
- android(33)(IP拨号器)
- datetimepicker一个不错的日历android特效
- Android开发应该重视一下Fragment
- 【android】夜间模式简单实现
- 【Android】状态栏通知Notification、NotificationManager详解
- Android进阶笔记08:Android 中Activity、Window和View之间的关系
- datetimepicker一个不错的日历android特效