我无法处理 Ionic 4 上的 android 后退按钮

I can't handle android back button on Ionic 4

我是 ionic 的新手 development.I 通过关注文章尝试了越来越多的方法。 最后我尝试了这个 请帮帮我 @Fabian N.

但在设备上,我无法确定后退按钮是否与代码有关...也就是说代码在我的情况下不起作用。 :(

这是我的离子信息。

Ionic:

   Ionic CLI                     : 5.2.3 (/usr/local/lib/node_modules/ionic)
   Ionic Framework               : @ionic/angular 4.6.2
   @angular-devkit/build-angular : 0.13.9
   @angular-devkit/schematics    : 7.3.9
   @angular/cli                  : 7.3.9
   @ionic/angular-toolkit        : 1.5.1

Cordova:

   Cordova CLI       : 9.0.0 (cordova-lib@9.0.1)
   Cordova Platforms : android 8.0.0, ios 5.0.1
   Cordova Plugins   : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.1.1, (and 16 other plugins)

Utility:

   cordova-res : not installed
   native-run  : 0.2.8 

System:

   ios-deploy : 1.9.4
   ios-sim    : 8.0.1
   NodeJS     : v11.10.1 (/usr/local/bin/node)
   npm        : 6.7.0
   OS         : macOS Mojave
   Xcode      : Xcode 10.2 Build version 10E125

我已经在 app.component.ts 中尝试过以下事件。但是当我点击后退按钮时,我无法在真实设备上收到任何警报。

1. Test case
  this.platform.backButton.subscribe(async () => {
     alert("Fired Back Button"); 
  });

2. Test case
  this.platform.backButton.subscribe(() => {
     alert("Fired Back Button"); 
  });

3. test case
  this.platform.backButton.subscribeWithPriority(0, () => {
     alert("Fired Back Button"); 
  });



4. test case
  this.platform.backButton.subscribeWithPriority(100, () => {
     alert("Fired Back Button"); 
  });

在这种情况 4 中,我已经尝试过诸如优先级:100、101、400、999999。但是单击 android 后退按钮时我无法收到任何警报。

但实际上后退按钮总是弹出页面。

我只需要在我的项目中处理 android 硬件后退按钮。 请帮我。 先感谢您。 最好的问候

你可以试试这个

this.platform.backButton.subscribe(() => {
  // this does work
});

我的问题终于得到了正确答案。 解决方案是 Enol's answer。我已经写在我的 app.component.ts 文件中。

const event = fromEvent(document, 'backbutton');
event.subscribe(async () => {
  // logic for navigation, modal, popover, menu closing
  this.navCtrl.pop(); // I have used for my case

  ...

});

谢谢Markus

重构智一的回答

这个作品!

    const event = fromEvent(document, 'ionBackButton');
    event.subscribe(async () => {
        console.log('hardware back button triggered')
    })

    //you may want store that subscription and unbscribe on ngOnDestroy.

peterpeterparker solution from github

    @HostListener('document:ionBackButton', ['$event'])
     private overrideHardwareBackAction($event: any) {
         $event.detail.register(100, async () => {
          // Do what you want
         });
     }