Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ngCordova检查活动网络连接,如果在ionic中未处于活动状态,则退出应用程序_Javascript_Android_Angularjs_Ionic Framework_Ionic Popup - Fatal编程技术网

Javascript 使用ngCordova检查活动网络连接,如果在ionic中未处于活动状态,则退出应用程序

Javascript 使用ngCordova检查活动网络连接,如果在ionic中未处于活动状态,则退出应用程序,javascript,android,angularjs,ionic-framework,ionic-popup,Javascript,Android,Angularjs,Ionic Framework,Ionic Popup,我正在开发一个会议应用程序,它是数据驱动的,并且将从web服务器不断更新。我将数据存储在本地存储器中以备持久性使用,但当应用程序第一次安装并启动时,我希望弹出一条“无互联网连接”消息,并在他们单击弹出窗口上的任何按钮时关闭应用程序。但当有互联网时,请加载应用程序。我已经在app.run函数中执行了此操作,但它不起作用 var app = angular.module('starter', ['ionic', 'ionic-material', 'ngCordova']); app.run(fu

我正在开发一个会议应用程序,它是数据驱动的,并且将从web服务器不断更新。我将数据存储在本地存储器中以备持久性使用,但当应用程序第一次安装并启动时,我希望弹出一条“无互联网连接”消息,并在他们单击弹出窗口上的任何按钮时关闭应用程序。但当有互联网时,请加载应用程序。我已经在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);
            }
        }
    });
});
应用程序弹出消息,但只要点击任何按钮(确定和取消),应用程序就会停留在白色屏幕上。它不会退出应用程序。 我不知道我做错了什么。请我需要的建议和代码样本,以纠正我的错误

阅读他们的“it say's use”

ionic.Platform.exitApp();
退出应用程序

您还验证了您的代码是否达到了该条件。

阅读他们的it声明以供使用

ionic.Platform.exitApp();
退出应用程序


您还验证了您的代码是否达到该状态。

需要记住的几个方面:

  • 据报告,您的exitApp()实现在iOS设备中不起作用

  • 杀掉一个应用对于可用性来说是一个很大的禁忌,你最好用最新的数据来展示界面,或者如果有任何数据被缓存,则在应用布局中集成一条“无网络连接”的消息(例如checkout Spotify)

在任何情况下,您都可以使用捆绑的
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;
    });
});

需要记住的几个方面:

  • 据报告,您的exitApp()实现在iOS设备中不起作用

  • 杀掉一个应用对于可用性来说是一个很大的禁忌,你最好用最新的数据来展示界面,或者如果有任何数据被缓存,则在应用布局中集成一条“无网络连接”的消息(例如checkout Spotify)

在任何情况下,您都可以使用捆绑的
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;
    });
});

谢谢Enrico,当用户第一次加载应用程序时,我正在尝试检查连接。我已经从我的每个控制器的本地存储中加载了数据(虽然这是一个糟糕的做法),但是如果用户以前从未打开过具有internet连接的应用程序,我需要检查internet连接并退出该应用程序。如果他有一次上网。。。我需要它绕过该功能,并转移到控制器逻辑,该逻辑将从本地存储器加载数据。你可以检查我的代码。只是修复了我代码段上的一个错误(我没有否定ConnectivityService.isOnline,现在是)。您可以在用户第一次联机时将变量保存在localstorage中,并使用该值绕过强制退出。我将更新答案。谢谢Enrico,我正在尝试在用户首次加载应用程序时检查连接。我已经从我的每个控制器的本地存储中加载了数据(虽然这是一个糟糕的做法),但是如果用户以前从未打开过具有internet连接的应用程序,我需要检查internet连接并退出该应用程序。如果他有一次上网。。。我需要它绕过该功能,并转移到控制器逻辑,该逻辑将从本地存储器加载数据。你可以检查我的代码。只是修复了我代码段上的一个错误(我没有否定ConnectivityService.isOnline,现在是)。您可以在用户第一次联机时将变量保存在localstorage中,并使用该值绕过强制退出。我将更新答案。