如果在使用ngCordova的离子中未激活,则检查活动网络连接并退出应用程序

时间:2016-10-11 21:09:35

标签: javascript android angularjs ionic-framework ionicpopup

我正在开发一个数据驱动的会议应用程序,并将不断从Web服务器进行更新。我将数据存储在本地存储上以保持持久性,但是当第一次安装并启动应用程序时,我想弹出“无Internet连接”消息并在弹出时点击任何按钮关闭应用程序。但当有互联网加载应用程序。我在我的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);
            }
        }
    });
});

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

2 个答案:

答案 0 :(得分:2)

要牢记的几个方面:

  • 您的exitApp()实现报告不适用于iOS设备

  • 杀死一个应用程序对于可用性来说是一个很大的问题,你最好使用最新的chached数据呈现界面,或者如果任何数据被缓存,则将“无网络连接”消息集成到应用程序布局中(checkout Spotify for一个例子)

无论如何,您可以通过http://ngcordova.com/

捆绑的ngCordova.plugins.network模块与您达成目的

这是一个返回当前网络状态的服务示例:

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;
    });
});

答案 1 :(得分:0)

阅读他们所说的doc

ionic.Platform.exitApp();

退出应用。

你也验证了你的代码,甚至可以达到这个条件。