【问题标题】:Checking for Active Network connection and exiting the app if not active in ionic using ngCordova使用 ngCordova 检查活动网络连接并退出应用程序(如果在 ionic 中不活动)
【发布时间】:2016-10-11 21:09:34
【问题描述】:

我正在开发一个数据驱动的会议应用程序,并且会不断地从网络服务器更新。我将数据存储在本地存储中以保持持久性,但是当第一次安装和启动应用程序时,我想弹出“无 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);
            }
        }
    });
});

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

【问题讨论】:

    标签: javascript android angularjs ionic-framework ionic-popup


    【解决方案1】:

    要记住的几个方面:

    • 您的 exitApp() 实现被报告无法在 iOS 设备上运行

    • 杀死一个应用程序对可用性来说是一个很大的问题,你最好在界面上显示最新的缓存数据,或者如果缓存了任何数据,则将“无网络连接”消息集成到应用程序布局中(查看 Spotify一个例子)

    无论如何,您的目的可以通过ngCordova.plugins.network 模块实现,捆绑在http://ngcordova.com/

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

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

    【讨论】:

    • 感谢 Enrico,我正在尝试在用户首次加载应用程序时检查连接。我已经从我的每个控制器的本地存储中加载数据(虽然是不好的做法),但是如果用户以前从未通过互联网连接打开过应用程序,我需要检查互联网连接并退出应用程序。如果他已经加载了一次互联网连接......我需要它绕过该功能并转移到我的控制器逻辑,该逻辑将从本地存储加载数据。你可以查看我的代码here
    • 刚刚修复了我的 sn-p 上的一个错误(我没有否定 ConnectivityService.isOnline,现在它是)。您可以在用户第一次在线时将变量保存在 localstorage 中,并使用该值绕过强制退出。我要更新答案。
    【解决方案2】:

    阅读他们的doc 它说要使用

    ionic.Platform.exitApp();
    

    退出应用程序。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2022-07-30
      相关资源
      最近更新 更多