Android 除DeviceRady事件外,任何Cordova事件均不起作用

Android 除DeviceRady事件外,任何Cordova事件均不起作用,android,cordova,events,Android,Cordova,Events,我正在尝试在我的Android Cordova应用程序中捕获设备事件。但是,除了devicerady事件外,没有其他事件被触发。我正在使用DeviceRady事件后Cordova文档中给出的事件。我的Cordova版本6.4.0 document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { document.addEventListener("backbutton",

我正在尝试在我的Android Cordova应用程序中捕获设备事件。但是,除了
devicerady
事件外,没有其他事件被触发。我正在使用DeviceRady事件后Cordova文档中给出的事件。我的Cordova版本
6.4.0

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {

  document.addEventListener("backbutton", function(e){
    // My Code here
  });

  document.addEventListener("volumedownbutton", onVolumeDownKeyDown, false);

  function onVolumeDownKeyDown() {
     console.log('volume downn')
    // Handle the volume down button
  }

  document.addEventListener("menubutton", onMenuKeyDown, false);

  function onMenuKeyDown() {
   console.log('menu button')
      // Handle the back button
  }

  document.addEventListener("volumeupbutton", onVolumeUpKeyDown, false);

  function onVolumeUpKeyDown() {
    console.log('volume up button')
     // Handle the volume up button
  }
};
请参阅一个问题,将cordova版本更新为
6.4.0
会给同一个项目带来错误,该项目在
6.2.0

<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="cordova.js"></script> 
        <script>
            document.addEventListener("deviceready", onDeviceReady, false);
            function onDeviceReady(){
                setTimeout(function(){
                    try{
                        document.addEventListener('backbutton', function(e){    
                            alert("Back Button Clicked")
                        }, false);
                    }catch(e){
                        alert(e);
                    }
                }, 500);
            }
        </script>
    </head>
    <body>
        <div>
            <h1>Click Android Back button to see event fired or not</h1>
        </div>
    </body>
</html>
解决方案是降低科尔多瓦版本的等级,帮助他重新恢复项目

我已经创建了一个测试项目,并将这个
index.html
放到了我的测试项目中,它非常适合我,只需尝试将它添加到您的测试项目中,然后告诉我们它是否有效

我的Cordova版本
6.2.0

<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="cordova.js"></script> 
        <script>
            document.addEventListener("deviceready", onDeviceReady, false);
            function onDeviceReady(){
                setTimeout(function(){
                    try{
                        document.addEventListener('backbutton', function(e){    
                            alert("Back Button Clicked")
                        }, false);
                    }catch(e){
                        alert(e);
                    }
                }, 500);
            }
        </script>
    </head>
    <body>
        <div>
            <h1>Click Android Back button to see event fired or not</h1>
        </div>
    </body>
</html>

文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
函数ondevicerady(){
setTimeout(函数(){
试一试{
document.addEventListener('backbutton',函数(e){
警报(“单击后退按钮”)
},假);
}捕获(e){
警报(e);
}
}, 500);
}
单击Android后退按钮查看是否触发事件

这些事件处理程序是在deviceready函数内定义的还是在其外部定义的?如backbutton事件所示。@Blauharley它们是在该链接中给出的deviceReady事件触发后定义的。您插入的代码是可以的,但是仍然有代码丢失,导致调用此代码太早。如何包装这些处理程序?请检查我的更新代码。这就是我调用这些事件的方式。正如@Blauharley所说,您的函数调用这些代码太早了,只需将超时时间添加到不同的侦听器中,最短时间为1秒