使用 ngCordova 检查活动网络连接并退出应用程序(如果在 ionic 中不活动)

Checking for Active Network connection and exiting the app if not active in ionic using ngCordova

我正在开发一个会议应用程序,该应用程序是数据驱动的,并且会不断从 Web 服务器更新。我将数据存储在本地存储中以实现持久性,但是当应用程序首次安装和启动时,我想弹出 "No Internet Connection" 消息并在他们单击弹出窗口中的任何按钮时关闭应用程序。但是当有互联网加载应用程序时。我已经在我的 app.run 函数中这样做了,但它不起作用。

var app = angular.module('starter', ['ionic', 'ionic-material', 'ngCordova']);

app.run(function ($ionicPlatform, $ionicPopup, $timeout) {
    $ionicPlatform.ready(function () {
        // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
        // for form inputs)

        if (window.cordova && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        if (window.StatusBar) {
            StatusBar.styleDefault();
        }

        //checking for internet connection on startup
        if (window.Connection) {
            if (navigator.connection.type === Connection.NONE) {
                document.addEventListener("offline", function () {
                    $ionicPopup.confirm({
                        title: "Internet Disconected",
                        content: "Sorry, No internet connection now, please try again"
                    }).then(function (result) {
                        if (!result) {
                            $ionicPlatform.exitApp();
                        }
                    });
                }, false);
            }
        }
    });
});

应用程序弹出消息,但在单击任何按钮(确定和取消)时,应用程序只停留在白屏上。它不会退出应用程序。 我不知道我做错了什么。请我需要建议和代码示例来纠正我的错误。

阅读他们的 doc 它说要使用

ionic.Platform.exitApp();

退出应用程序。

您是否还验证了您的代码是否符合该条件。

需要牢记的几个方面:

  • 据报道,您的 exitApp() 实现在 iOS 设备

  • 中不起作用
  • 关闭一个应用程序对于可用性来说是一个很大的禁忌,你最好用最新的缓存数据来呈现界面,或者如果有任何数据被缓存,则将 "no network connection" 消息集成到应用程序布局中(以 Spotify 为例)

无论如何,您的目的可以通过捆绑在 http://ngcordova.com/

中的 ngCordova.plugins.network 模块来实现

这是returns当前网络状态的服务示例:

angular.module('app.common.connectivity', [
  'ngCordova.plugins.network'
])

.service('ConnectivityService', function($cordovaNetwork) {
  this.isOnline = $cordovaNetwork.isOnline() || false;
});

您可以添加此模块并在需要的地方注入服务,例如:

var app = angular.module('starter', ['ionic', 'ionic-material', 'app.common.connectivity']);

app.run(function ($ionicPlatform, $ionicPopup, $timeout, ConnectivityService) {
    $ionicPlatform.ready(function () {
        // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
        // for form inputs)

        if (window.cordova && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        if (window.StatusBar) {
            StatusBar.styleDefault();
        }

        //checking for internet connection on startup
        if( !ConnectivityService.isOnline && !window.localStorage.appLaunched ) {
          $ionicPopup.confirm({
            title: "Internet Disconected",
            content: "Sorry, No internet connection now, please try again"
          })
          .then(function(result) {
            $ionicPlatform.exitApp();
          });
        }

        // Apparently we're online so remember we already have been here
        if ( !localStorage.appLaunched ) localStorage.appLaunched = true;
    });
});