【问题标题】:Exit application from android hardware back button in phonegap从phonegap中的android硬件后退按钮退出应用程序
【发布时间】:2023-11-28 10:59:01
【问题描述】:

当您按下 android 设备中的硬件后退按钮以退出 phonegap/ionic 应用程序时,是否有办法显示确认弹出窗口?

在当前状态下,我的应用在单击后退按钮后会继续返回之前的状态。

无论您在应用程序的哪个位置,按下后退按钮时是否有退出应用程序的方法?

我找到了这段代码,但它似乎不起作用:

$ionicPlatform.registerBackButtonAction(function() {
    var confirmPopup = $ionicPopup.confirm({
        title: 'Sign Out Confirm',
        template: 'Are you sure you want to Logout?'
    });
    confirmPopup.then(function(res) {
        if (res) {
            $rootScope.rootScopeUserTransactionPassword = null;
            $state.go('app.playlists');
        } else {
            console.log('You are not sure');
        }
    });
}, 100);

【问题讨论】:

    标签: android angularjs cordova ionic-framework back-button


    【解决方案1】:

    它会在规定的时间戳退出前询问您:再次按下返回按钮退出。如果是仪表板页面,那么它会询问是否注销? 希望能解决你的问题。

    .run(function($rootScope, $ionicPlatform, $ionicHistory){
        $ionicPlatform.registerBackButtonAction(function(e) {
                if ($ionicHistory.currentView().stateName == 'dashboard') {
                    Dialogs.showConfirm('Do you want to logout?', function(buttonIndex) {
                        if (buttonIndex == 1)
                            User.clear();
                    }, 'Logout', ['Yes', 'No']);
                } else
    
                if ($rootScope.backButtonPressedOnceToExit) {
                    ionic.Platform.exitApp();
                } else if ($ionicHistory.backView()) {
                    $ionicHistory.goBack();
                } else {
                    $rootScope.backButtonPressedOnceToExit = true;
                    window.plugins.toast.showShortCenter(
                        "Press back button again to exit",
                        function(a) {},
                        function(b) {}
                    );
                    setTimeout(function() {
                        $rootScope.backButtonPressedOnceToExit = false;
                    }, 2000);
                }
                e.preventDefault();
                return false;
            }, 101);
    });
    

    【讨论】:

      【解决方案2】:

      试试这个:

      document.addEventListener('backbutton', function(event){
        event.preventDefault(); // EDIT
        navigator.app.exitApp(); // exit the app
      });
      

      希望对你有帮助。

      【讨论】:

      • 在 index.html 文件的 head 标签内,您可以将此代码放在 标签内。
      • 此代码将使您从所有屏幕中退出应用程序。如果您不想退出除主屏幕以外的应用程序,则必须进行一些修改。
      • 检查答案。我添加了一行。告诉我它是否没有帮助。
      【解决方案3】:

      如果我们在“登录”屏幕中点击 Android 设备上的返回按钮,以下将关闭应用程序。
      在你的 app.js 中你可能有这样的东西:

      app.config(function($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
      $stateProvider.state('login', {
          url : '/',
      }).state('login', {
          url : '/login',
          views : {
              contentView : {
                  templateUrl : 'login.html',
                  controller : 'LoginCtrl'
              }
          }
      });
      

      所以你所要做的就是在同一个文件中添加这个方法:

      app.run(function($ionicPlatform) {
          $ionicPlatform.registerBackButtonAction(function() {
              if ($state.current.name == "login") {
                  navigator.app.exitApp();
              }
          }, 100);
      });
      

      请注意,“登录”它是 app.config 中提到的状态名称

      【讨论】:

      • 如果我使用 Cordova 而不是 ionic 来做这件事,该怎么写?