我正在使用PhoneGap Api 1.4.1并且我尝试使用1.5.0,PhoneGap事件volumeupbutton和volumedownbutton不工作,它既不适用于
Android设备也不适用于模拟器.当按下音量按钮时,它必须按下它显示警报查看代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>PhoneGap Volume Down Button Example</title> <script type="text/javascript" charset="utf-8" src="phonegap.js"></script> <script type="text/javascript" charset="utf-8"> // Call onDeviceReady when PhoneGap is loaded. // // At this point,the document has loaded but phonegap.js has not. // When PhoneGap is loaded and talking with the native device,// it will call the event `deviceready`. // function onLoad() { document.addEventListener("deviceready",onDeviceReady,false); } // PhoneGap is loaded and it is now safe to make calls PhoneGap methods // function onDeviceReady() { // Register the event listener document.addEventListener("volumedownbutton",onVolumeDownKeyDown,false); document.addEventListener("volumeupbutton",onVolumeUpKeyDown,false); } // Handle the volume down button // function onVolumeDownKeyDown() { alert("Down"); } function onVolumeUpKeyDown() { alert("Up"); } </script> </head> <body onload="onLoad()"> </body> </html>
解决方法
您可以执行以下操作,以使用android运行音量按钮:
@Override public boolean onKeyDown(int keyCode,KeyEvent event) { //If volumedown key if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { this.loadUrl("javascript:cordova.fireDocumentEvent('volumedownbutton');"); return true; } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');"); return true; } else { //return super.onKeyDown(keyCode,event); } //return super.onKeyDown(keyCode,event); return true; } @Override public boolean onKeyUp(int keyCode,KeyEvent event) { LOG.d(TAG,"KeyUp has been triggered on the view" + keyCode); // If back key if (keyCode == KeyEvent.KEYCODE_BACK) { this.loadUrl("javascript:cordova.fireDocumentEvent('backbutton');"); return true; } // Legacy else if (keyCode == KeyEvent.KEYCODE_MENU) { this.loadUrl("javascript:cordova.fireDocumentEvent('menubutton');"); return true; } // If search key else if (keyCode == KeyEvent.KEYCODE_SEARCH) { this.loadUrl("javascript:cordova.fireDocumentEvent('searchbutton');"); return true; } return false; }
我从cordova错误报告中复制了这段代码.此代码适用于cordova 2.0.我瘦你必须将“cordova.fireDocumentEvent”更改为“phonegap.fireDocument”或“PhoneGap.fireDocumentEvent”
更新:
刚刚写了一篇关于这个bug的小博客帖子,这个帖子已经由上面的代码解决了.可以在该帖子中找到Cordova-Issue-Tracker的链接:http://christian-kuetbach.de/blog/post/13
更新2:
问题似乎在cordova 1.9中得到修复:
https://issues.apache.org/jira/browse/CB-871
希望这可以帮助.